2012-01-21 52 views
3

我需要得到所影响的批量的所有行删除那样:SQLAlchemy的:获取行受批量删除

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

我发现the possibility to subscribe to bulk delete events但想不通我怎么能使用此事件实际上得到我需要的信息。

+0

你可以通过一个小的测试用例脚本开始..事情是这样的:http://plaes.org/files/2012-Q1/sqlalchemy-after-insert.py – plaes

+0

什么背景?你为什么想要这些行?你需要所有的行还是只有'ID's。另外,如果你的模型有继承,那么对象'SomeClass'可能被映射到多个表中的行。 – van

+0

@van我只需要知道,删除了该行的ID。这是我编写的监控数据库对象生命周期的库。随着基于实例的添加/删除这是很容易的,因为你可以挂接到每个对象的事件,而对批量删除的任何对象获得创建它因此需要不同的方法。关于你点'SomeClass'可能映射到多个表行:在Query.delete()命令目前不支持批量删除对多个表,这让事情变得更简单:) – epegzz

回答

3

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

+1感谢您参加回答你自己的问题和明确的时间(元组与ORM对象)。你刚刚救了我很多头痛。 – ccoakley

+0

这可以同步完成吗? – Ofir

+0

你有一个较新版本的SQLAlchemy的这方面的工作?我无法用1.1.5这种方式获取行数据。谢谢 – Alex