SQL: mongokit like interface

In trying to ease the migration to SQL, created an
interface to sqlalchemy that looks a lot like the interface
that is currently in use.

*WARNING* Work in progress
This commit is contained in:
Elrond 2011-12-18 17:02:27 +01:00
parent 18517e888a
commit 7b194a79f0
4 changed files with 54 additions and 2 deletions

View File

@ -0,0 +1,16 @@
from sqlalchemy.orm import scoped_session, sessionmaker
Session = scoped_session(sessionmaker())
class GMGTableBase(object):
query = Session.query_property()
@classmethod
def find(cls, query_dict={}):
return cls.query.filter_by(**query_dict)
@classmethod
def find_one(cls, query_dict={}):
return cls.query.filter_by(**query_dict).first()

View File

@ -7,7 +7,8 @@ from mediagoblin.db.util import ObjectId
from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment,
Tag, MediaTag)
Session = sessionmaker()
# Session = sessionmaker()
from mediagoblin.db.sql.base import Session
obj_id_table = dict()
@ -134,9 +135,13 @@ def main():
Base.metadata.create_all(engine)
convert_users(mk_db)
Session.remove()
convert_media_entries(mk_db)
Session.remove()
convert_media_tags(mk_db)
Session.remove()
convert_media_comments(mk_db)
Session.remove()
if __name__ == '__main__':

View File

@ -5,8 +5,10 @@ from sqlalchemy import (
Column, Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey,
UniqueConstraint)
from mediagoblin.db.sql.base import GMGTableBase
Base = declarative_base()
Base = declarative_base(cls=GMGTableBase)
class User(Base):

View File

@ -0,0 +1,29 @@
from sqlalchemy import create_engine
from mediagoblin.db.sql.base import Session
from mediagoblin.db.sql.models import Base
class DatabaseMaster(object):
def __init__(self, engine):
self.engine = engine
for k,v in Base._decl_class_registry.iteritems():
setattr(self, k, v)
def commit(self):
Session.commit()
def save(self, obj):
Session.add(obj)
Session.flush()
def reset_after_request(self):
Session.remove()
def setup_connection_and_db_from_config(app_config):
engine = create_engine(app_config['sql_engine'], echo=True)
Session.configure(bind=engine)
return "dummy conn", DatabaseMaster(engine)