这里真的有两个问题。
如果我像这样运行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 _?
进行这样的更新答案 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评估查询的标准 会话。如果没有实施标准评估,则例外 被提出来了。