sqlalchemy在删除不同表后触发自动插入

时间:2019-04-28 15:47:49

标签: mysql sqlalchemy

我正在将SQLAlchemy与python结合使用,想知道从表Deleted Users中删除记录后是否可以自动将记录插入表Users中。

我知道使用外键可以使用on_delete属性从连接的表中删除记录,但是我需要插入记录。

为简单起见,我们假设两个表都具有相同的架构(2列; user_idusername

谢谢

1 个答案:

答案 0 :(得分:1)

触发或“已删除”列可能是最可靠的方法,但如果您想使用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函数将捕获从用户表中删除的通用查询。