sqlalchemy:获取受批量删除影响的行

时间:2012-01-21 15:22:25

标签: python events sqlalchemy

我需要获取受批量删除影响的所有行:

Session.query(SomeClass).filter_by(foo='bar').delete()

我找到了the possibility to subscribe to bulk delete events,但无法弄清楚如何使用此事件来实际获取我需要的信息。

2 个答案:

答案 0 :(得分:4)

好的,找到答案\☺/您可以重新执行用于选择批量删除行的select语句。遗憾的是,您无法查询ORM对象,但您可以获取所有已删除行的列表,其中旧列值为元组:

def after_bulk_delete(session, query, query_context, result):
    affected_table = query_context.statement.froms[0]
    affected_rows = query_context.statement.execute().fetchall() 

sqlalchemy.event.listen(Session, "after_bulk_delete", after_bulk_delete)

答案 1 :(得分:2)

来自

https://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.delete

  

执行批量删除查询。

     

从数据库中删除此查询匹配的行。

     

返回:数据库的“行”返回的匹配行数   计算“功能。