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

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

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/452 ... -in-pylons

Вернуться в «Python»