【发布时间】:2011-05-30 09:59:08
【问题描述】:
我想使用自动加载来使用现有数据库。我知道如何在没有声明性语法的情况下做到这一点 (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=
将 MetaData 与引擎关联将引擎传递给 Table,或通过 metadata.bind=
这里的问题是,在导入模型的阶段(它在 init_model() 中可用),我不知道从哪里获取引擎(在 autoload_with 中使用它)。我尝试添加
meta.Base.metadata.bind(engine)
到 environment.py 但它不起作用。有人找到了一些优雅的解决方案吗?
【问题讨论】:
标签: python reflection sqlalchemy pylons declarative