SQLAlchemy declarative multiple database overlap model

I am trying to outline my database in two parts: one for my main objects, the other for magazines. Right now, my code looks something like this:

engine = create_engine('postgresql+psycopg2://postgres: password@localhost :5432/logs') engine2 = create_engine('postgresql+psycopg2://postgres: password@localhost :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): ... 

Where I have more tables using Base and Base2, as well as inherited objects. I also tried the following:

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

However, using any method and working only with objects in Base, not Base2, I get the following error when prompted:

 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' 

Of course, my table has the attribute 'id', all the same code works as long as I have only one DBSession and one database. What am I doing wrong?

+4
source share
1 answer

I figured out this problem. I just needed to initiate DBSession() .

+2
source

Source: https://habr.com/ru/post/1390592/


All Articles