Python 使用sqlalchemy结果集进行更新

Python 使用sqlalchemy结果集进行更新,python,sqlalchemy,Python,Sqlalchemy,这里有两个问题 如果我像这样运行sqlalchemy查询: sensors = session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_serial_numbers'])).all() 然后我可以使用结果集(传感器)更新所有这些行中的列吗?我想不出它的语法,所以我试着这样做: session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_seri

这里有两个问题

如果我像这样运行sqlalchemy查询:

sensors = session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_serial_numbers'])).all()
然后我可以使用结果集(传感器)更新所有这些行中的列吗?我想不出它的语法,所以我试着这样做:

session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_serial_numbers'])).update({'system_id': system.id})
但这在炼金术的碗里是失败的:

  File "/home/ecovent/pyenv0.3/local/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 949, in _do_pre_synchronize
    "Could not evaluate current criteria in Python. "
InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.
我想这一定是因为in_uu子句,因为我在使用相同的构造之前做过更新,但它们没有in_u子句。我将如何使用in_u3;进行这样的更新?

尝试以下方法:

session.query(Sensor)\
    .filter(Sensor.serial_number.in_(data['sensor_serial_numbers']))\
    .update({'system_id': system.id}, synchronize_session='fetch')
这里有记录:

默认值为
evaluate

在Python中直接对 一场如果未执行标准评估,则会出现异常 这是提高


非常感谢你。这很有效。但是你能告诉我为什么这段代码在没有同步会话的情况下也能工作吗,元数据需要一个select查询来决定其内存中的哪些对象将过期。如果激活了echo模式,您可以看到select查询,但我不知道为什么它会这样设计。有人能解释一下“如果没有执行条件评估,则会引发异常”吗?取回是相当直接的,但评估一个似乎有点神秘对我来说。。。