我想使用自动加载来使用现有数据库。我知道如何在没有声明性语法的情况下做到这一点(model/_ init _.py):
def init_model(engine):
"""Call me before using any of the tables or classes in the model"""
t_events = Table('events', Base.metadata, schema='events', autoload=True, autoload_with=engine)
orm.mapper(Event, t_events)
Session.configure(bind=engine)
class Event(object):
pass
这很好用,但我想使用声明性语法:
class Event(Base):
__tablename__ = 'events'
__table_args__ = {'schema': 'events', 'autoload': True}
不幸的是,这样我得到:
sqlalchemy.exc.UnboundExecutionError:没有引擎绑定到此表的元数据。通过 autoload_with=<someengine> 将引擎传递给表,或通过 metadata.bind=<someengine> 将 MetaData 与引擎关联
这里的问题是,在导入模型的阶段(它在 init_model() 中可用),我不知道从哪里获取引擎(在 autoload_with 中使用它)。我尝试添加
meta.Base.metadata.bind(engine)
到 environment.py 但它不起作用。有人找到了一些优雅的解决方案吗?