この例は、「非宣言型」で使用する方法を示しています - http://docs.sqlalchemy.org/en/latest/core/ddl.html#sqlalchemy.schema.DDL
ORM 宣言構文でどのように使用できますか?
たとえば、次の構造を使用します。
Base = declarative_base(bind=engine)
class TableXYZ(Base):
__tablename__ = 'tablexyz'
この例は、「非宣言型」で使用する方法を示しています - http://docs.sqlalchemy.org/en/latest/core/ddl.html#sqlalchemy.schema.DDL
ORM 宣言構文でどのように使用できますか?
たとえば、次の構造を使用します。
Base = declarative_base(bind=engine)
class TableXYZ(Base):
__tablename__ = 'tablexyz'
ばかげた例ですが、これがあなたが探しているものだと思います。
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)
上記の結果を実行すると、追加された列の「名前テキスト」に注意してください。
sqlite> .schema tablexyz
CREATE TABLE tablexyz (
id INTEGER NOT NULL, name text,
PRIMARY KEY (id)
);
コードは宣言型であり、event.listen を使用してトリガーやその他のストアド プロシージャを追加します。うまくいくようです。
「非宣言型」と「宣言型」で同じである必要があります。
(クラスとドキュメントのイベントと関数を使用して)次のように指定して、イベントを登録します。
event.listen(TableXYZ, 'before_create', DDL('DROP TRIGGER users_trigger'))
構文は次のようなものです。
event.listen(Class, 'name_of_event', function)