使用SqlAlchemy更新for循环中的对象,这应该在理论上有效吗?

时间:2010-08-03 01:54:03

标签: python sqlalchemy

首先我要获取行:

q = session.query(products)

for p in q:
    p.someproperty = 23

    session.commit()

上述理论上应该有效吗?或者这是错误的模式?

我收到一条错误,说不能修改属性,这很奇怪,所以我觉得我做的事情从根本上是错误的。

2 个答案:

答案 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()。当然,循环完成后的单个提交会更有效。