Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy:获取受批量删除影响的行_Python_Events_Sqlalchemy - Fatal编程技术网

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

Python sqlalchemy:获取受批量删除影响的行,python,events,sqlalchemy,Python,Events,Sqlalchemy,我需要获取受批量删除影响的所有行,如下所示: Session.query(SomeClass).filter_by(foo='bar').delete() 我找到了,但不知道如何使用此事件来实际获取所需信息。好的,找到了答案\☺/ 您可以重新执行用于选择要批量删除的行的select语句。不幸的是,您无法查询ORM对象,但您可以获得所有已删除行的列表,其中旧列值为元组: def after_bulk_delete(session, query, query_context, result):

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

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

我找到了,但不知道如何使用此事件来实际获取所需信息。

好的,找到了答案\☺/ 您可以重新执行用于选择要批量删除的行的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)

执行批量删除查询

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

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


您可以从制作一个小的测试用例脚本开始。。比如:什么是背景?你为什么想要那些排?您需要所有行还是只需要
ID
s。此外,如果您的模型具有继承性,则对象
SomeClass
可能映射到多个表中的行。@van我只需要知道已删除行的id。这是我编写的用于监视数据库对象生命周期的库。通过基于实例的添加/删除,这很容易,因为您可以为每个对象钩住事件,而在批量删除时,不会创建对象,因此需要不同的方法。关于您认为
SomeClass
可能映射到多个表中的行的观点:Query.delete()命令目前不支持对多个表进行批量删除,这使事情变得更简单:)+1感谢您花时间回答您自己的问题,并且非常明确(元组与ORM对象)。你刚刚帮我省去了很多麻烦。你有没有在SQLAlchemy的最新版本中使用这个功能?我无法用1.1.5以这种方式获取行数据。感谢您只获取受影响行的数量,而不是ID。