Декларативный синтаксис SQLAlchemy с автозагрузкой (отражением) в Pylons

Я хотел бы использовать автозагрузку для использования существующих баз данных. Я знаю, как это сделать без декларативного синтаксиса (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, но это не сработало. Кто-нибудь нашел какое-нибудь элегантное решение?

9
задан Juliusz Gonera 10 January 2011 в 19:18
поделиться