我正在将SQLAlchemy与python结合使用,想知道从表Deleted Users
中删除记录后是否可以自动将记录插入表Users
中。
我知道使用外键可以使用on_delete属性从连接的表中删除记录,但是我需要插入记录。
为简单起见,我们假设两个表都具有相同的架构(2列; user_id
和username
。
谢谢
答案 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
函数将捕获从用户表中删除的通用查询。