3

私は単純なFlask-SQLAlchemyモデルを持っています(トリガーを作成するためのイベントリスナーを使用):

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Confirm(db.Model):
  created = db.Column(db.DateTime, default=db.func.current_timestamp(), nullable=False)
  modified = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp(), nullable=False)
  id = db.Column(db.String(36), primary_key=True) 

class ConfirmOld(db.Model):
  orig_created = db.Column(db.DateTime)
  orig_modified = db.Column(db.DateTime)
  orig_id = db.Column(db.String(36))

confirm_delete = DDL('''\
CREATE TRIGGER confirm_delete 
BEFORE DELETE
  ON confirm FOR EACH ROW
  BEGIN
    INSERT INTO confirm_old ( orig_created, orig_modified, orig_id )
    VALUES ( OLD.created, OLD.modified, OLD.id );
  END;
''')

event.listen(Confirm.__table__, 'after_create', confirm_delete)

Alembic の移行とアップグレードを実行すると、(MySQL で) TRIGGER が作成されません。ただし、db.create_all() を使用すると、作成されて正常に動作します

Alembic / Flask-Migrate でトリガー (after_create イベントで実行されるカスタム DDL) を作成および管理することはできますか?

4

1 に答える 1