使用sqlalchemy结果集进行更新

时间:2015-11-13 22:56:06

标签: 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_serial_numbers'])).update({'system_id': system.id})

但是在sqlalchemy的碗里却没有成功:

  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_子句,因为我在使用相同的构造之前已完成更新,但它们没有in_子句。如何使用in _?

进行这样的更新

1 个答案:

答案 0 :(得分:19)

试试这个:

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

这里记录了:doc

默认值为evaluate

  

直接在Python中的对象上用Python评估查询的标准   会话。如果没有实施标准评估,则例外   被提出来了。