首先我要获取行:
q = session.query(products)
for p in q:
p.someproperty = 23
session.commit()
上述理论上应该有效吗?或者这是错误的模式?
我收到一条错误,说不能修改属性,这很奇怪,所以我觉得我做的事情从根本上是错误的。
答案 0 :(得分:2)
2件事:
第一,每次更改后都不应该commit()
。你应该能够:
for p in session.query (query):
p.someproperty = somevalue
session.commit()
和第二,请在此处查看此主题:Efficiently updating database using SQLAlchemy ORM。这给出了另一个语法示例,并且接受的答案提示了一种更好,更有效的方法来执行此批量更新。
答案 1 :(得分:1)
您必须明确获取对象才能修改它们;你必须迭代session.query(query_string).all()
。当然,循环完成后的单个提交会更有效。