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

epe*_*gzz 6 python events sqlalchemy

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

Session.query(SomeClass).filter_by(foo='bar').delete()
Run Code Online (Sandbox Code Playgroud)

我发现可以订阅批量删除事件,但不知道如何使用此事件来实际获取我需要的信息。

epe*_*gzz 6

好的,找到答案 \?/ 您可以重新执行用于选择行以进行批量删除的 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)
Run Code Online (Sandbox Code Playgroud)

  • 您是否在更新版本的 SQLAlchemy 中使用此功能?我无法通过 1.1.5 以这种方式获取行数据。谢谢 (2认同)

And*_*ich 5

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

执行批量删除查询。

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

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