En SQLAlchemy, ¿cómo defino un evento para activar DDL usando la syntax declarativa?

Este ejemplo muestra cómo usarlo con “no declarativo” – http://docs.sqlalchemy.org/en/latest/core/ddl.html#sqlalchemy.schema.DDL

¿Cómo puedo usarlo con la syntax declarativa ORM?

Por ejemplo, con esta estructura:

Base = declarative_base(bind=engine) class TableXYZ(Base): __tablename__ = 'tablexyz' 

Un ejemplo tonto, pero creo que esto es lo que estás buscando, debería ponerte en marcha:

 from sqlalchemy import event from sqlalchemy.engine import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import create_session from sqlalchemy.schema import Column, DDL from sqlalchemy.types import Integer Base = declarative_base() engine = create_engine('sqlite:////tmp/test.db', echo=True) class TableXYZ(Base): __tablename__ = 'tablexyz' id = Column(Integer, primary_key=True) #event.listen( # Base.metadata, 'after_create', # DDL(""" # alter table TableXYZ add column name text # """) event.listen( TableXYZ.__table__, 'after_create', DDL(""" alter table TableXYZ add column name text """) ) Base.metadata.create_all(engine) 

Ejecutando los resultados anteriores en – nota “nombre de texto” para la columna agregada:

 sqlite> .schema tablexyz CREATE TABLE tablexyz ( id INTEGER NOT NULL, name text, PRIMARY KEY (id) ); 

Tengo mi código declarativo y utilizo event.listen para agregar activadores y otros procedimientos almacenados. Parece funcionar bien.

Debería ser lo mismo con “no declarativo” y “declarativo”.

Registra su evento especificando (con su clase y el evento y función del documento):

 event.listen(TableXYZ, 'before_create', DDL('DROP TRIGGER users_trigger')) 

La syntax es algo como:

 event.listen(Class, 'name_of_event', function)