SQLAlchemy sintaxis declarativa con carga automática (reflexión) en pilones
Me gustaría usar la carga automática para usar una base de datos existente. Sé cómo hacerlo sin sintaxis declarativa (modelo / _en eso_.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
Esto funciona bien, pero me gustaría usar la sintaxis declarativa:
class Event(Base):
__tablename__ = 'events'
__table_args__ = {'schema': 'events', 'autoload': True}
Desafortunadamente, de esta manera obtengo:
sqlalchemy.exc.UnboundExecutionError: ningún motor está vinculado a los metadatos de esta tabla. Pase un motor a la tabla a través de autoload_with = <someengine>, o asocie MetaData con un motor a través de metadata.bind = <someengine>
El problema aquí es que no sé de dónde obtener el motor (para usarlo en autoload_with) en la etapa de importación del modelo (está disponible en init_model ()). Traté de agregar
meta.Base.metadata.bind(engine)
a environment.py pero no funciona. ¿Alguien ha encontrado alguna solución elegante?