7
真的有2個問題在這裏。使用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_做這樣的更新?
非常感謝。這工作。但是,你能告訴我爲什麼這個代碼也可以在沒有'synchronize_session'' session.query(ApplicationInstallation).filter_by(control_hub_id = hub_id).filter(ApplicationInstallation.removal_date == None).update({'delete_date':utc_now} )' –
@LarryMartell當你使用'in_'時,無論是否明顯,MetaData都需要一個選擇查詢來決定哪個內存對象到期。你可以看到選擇查詢,如果回聲模式被激活,但我不知道它爲什麼這樣設計。 – kxxoling
任何人都可以解釋「如果評估標準沒有實施,會引發例外」嗎? * fetch *非常直截了當,但*評價*對我來說似乎有點神祕... – Son