对upd使用sqlalchemy结果集

2024-05-17 01:01:32 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有两个问题。

如果我运行这样的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_u子句,就像我在使用同一个构造之前所做的更新一样,但是它们没有in_u子句。我该如何用in_u来做这样的更新?


Tags: inidnumberdatasynchronizesqlalchemysessionserial
1条回答
网友
1楼 · 发布于 2024-05-17 01:01:32

试试这个:

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

这里有记载:doc

默认值是evaluate,其中

Evaluate the Query’s criteria in Python straight on the objects in the session. If evaluation of the criteria isn’t implemented, an exception is raised.

相关问题 更多 >