Я хотел бы использовать автозагрузку для использования существующих баз данных. Я знаю, как это сделать без декларативного синтаксиса (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.bind =
Проблема в том, что я не не знаю, откуда взять движок (использовать в autoload_with) на этапе импорта модели (он доступен в init_model ()). Я попытался добавить
meta.Base.metadata.bind(engine)
в environment.py, но это не сработало. Кто-нибудь нашел какое-нибудь элегантное решение?