我需要得到所影响的批量的所有行删除那样:SQLAlchemy的:获取行受批量删除
Session.query(SomeClass).filter_by(foo='bar').delete()
我发现the possibility to subscribe to bulk delete events但想不通我怎么能使用此事件实际上得到我需要的信息。
我需要得到所影响的批量的所有行删除那样:SQLAlchemy的:获取行受批量删除
Session.query(SomeClass).filter_by(foo='bar').delete()
我发现the possibility to subscribe to bulk delete events但想不通我怎么能使用此事件实际上得到我需要的信息。
好了,找到了答案\☺/你可以重新执行被用来选择批量删除行的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)
从
http://docs.sqlalchemy.org/en/rel_0_7/orm/query.html#sqlalchemy.orm.query.Query.delete
“执行批量删除查询,返回删除的行数,排除任何级联。“
你只能得到受影响的行数,而不是id。 – epegzz
你可以通过一个小的测试用例脚本开始..事情是这样的:http://plaes.org/files/2012-Q1/sqlalchemy-after-insert.py – plaes
什么背景?你为什么想要这些行?你需要所有的行还是只有'ID's。另外,如果你的模型有继承,那么对象'SomeClass'可能被映射到多个表中的行。 – van
@van我只需要知道,删除了该行的ID。这是我编写的监控数据库对象生命周期的库。随着基于实例的添加/删除这是很容易的,因为你可以挂接到每个对象的事件,而对批量删除的任何对象获得创建它因此需要不同的方法。关于你点'SomeClass'可能映射到多个表行:在Query.delete()命令目前不支持批量删除对多个表,这让事情变得更简单:) – epegzz