使用 SqlAlchemy 在 for 循环中更新对象,这在理论上应该有效吗?
Posted
技术标签:
【中文标题】使用 SqlAlchemy 在 for 循环中更新对象,这在理论上应该有效吗?【英文标题】:Updating an object in a for loop using SqlAlchemy, should this work in theory? 【发布时间】:2011-03-24 12:20:28 【问题描述】:所以首先我要获取行:
q = session.query(products)
for p in q:
p.someproperty = 23
session.commit()
以上理论上应该可行吗?还是那是错误的模式?
我收到一条错误消息,说不能修改属性,这很奇怪,所以我认为我做的事情根本上是错误的。
【问题讨论】:
【参考方案1】:两件事:
第一,您不必在每次更改后都commit()
。您应该能够:
for p in session.query (query):
p.someproperty = somevalue
session.commit()
第二个,请在此处查看此线程:Efficiently updating database using SQLAlchemy ORM。这给出了另一个语法示例,并且接受的答案也提出了一种更好、更有效的方式来执行这种大规模更新。
【讨论】:
【参考方案2】:您必须显式获取对象才能修改它们;您必须遍历 session.query(query_string).all()
。当然,在循环结束后进行一次提交会更有效。
【讨论】:
以上是关于使用 SqlAlchemy 在 for 循环中更新对象,这在理论上应该有效吗?的主要内容,如果未能解决你的问题,请参考以下文章