2012-01-12 2 views
4

내 데이터베이스를 두 개로 분할하려고합니다. 하나는 내 주요 개체 용이고 다른 하나는 로그 용입니다. 지금 내 코드는 다음과 같습니다.SQLAlchemy 다중 데이터베이스 샤딩을 사용하는 선언적 모델

engine = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/logs') 
engine2 = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/logs') 
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) 
binds = {'thing': engine, 
    'log': engine_a} 
DBSession.configure(binds=binds) 
Base = declarative_base(bind=engine) 
Base2 = declarative_base(bind=engine2) 

class Thing(Base): 
    ... 

class Log(Base2): 
    ... 

여기에는 상속 된 객체와 Base와 Base2를 모두 사용하는 테이블이 더 있습니다. 쿼리 할 때, 나는 오류를 다음 얻을, 그러나

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension(), bind=engine)) 
DBSession2 = scoped_session(sessionmaker(extension=ZopeTransactionExtension(), bind=engine2)) 

중 하나의 방법을 사용하여 만 자료,하지 Base2의 개체 작업 : 나는 또한 다음을 수행하려고했습니다 물론

return DBSession.query(cls).filter(func.lower(cls.name) == name.lower()).first() 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/scoping.py", line 113, in do 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/session.py", line 969, in query 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/query.py", line 107, in __init__ 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/query.py", line 116, in _set_entities 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/query.py", line 131, in _setup_aliasizers 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/util.py", line 550, in _entity_info 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/mapper.py", line 2861, in configure_mappers 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/mapper.py", line 1166, in _post_configure_properties 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/interfaces.py", line 128, in init 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/properties.py", line 913, in do_init 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/properties.py", line 969, in _process_dependent_arguments 
    File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/ext/declarative.py", line 1346, in return_cls 
    File "<string>", line 1, in <module> 
AttributeError: 'Table' object has no attribute 'id' 

내 테이블에 'id'속성이 있으면 모든 DBSession과 Base가 하나만 있으면 모든 코드가 작동합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

지금은이 작업을 수행하려고 노력 중이 아니며 갑자기 오류가 발생합니다. 음 ... –

답변

2

나는이 문제를 발견했다. 간단히 DBSession()을 시작해야했습니다.

관련 문제