Триггеры или «удаленный» столбец могут быть наиболее надежным способом сделать это, но если вы хотите сделать это с помощью SQLAlchemy, API события может быть подходящим способом.
from sqlalchemy import event
from sqlalchemy.sql import dml, select
def before_flush(session, flush_context, instances):
for instance in session.deleted:
if isinstance(instance, User):
# insert into the deleted user table
def before_execute(conn, clauseelement, multiparams, params):
if isinstance(clauseelement, dml.Delete):
if clauseelement.table.name == "user":
query = select([clauseelement.table])
if clauseelement._whereclause is not None:
query = query.where(clauseelement._whereclause)
for row in conn.execute(query):
# insert into the deleted user table
event.listen(session, "before_flush", before_flush)
event.listen(engine, "before_execute", before_execute)
Функция before_flush
будет захватывать удаления ORM, тогда как before_execute
захватывает общие запросы, которые удаляются из пользовательской таблицы.