Davvero 2 domande qui.Utilizzo del set di risultati sqlalchemy per l'aggiornamento
Se corro una query sqlalchemy come questo:
sensors = session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_serial_numbers'])).all()
Posso quindi utilizzare il set di risultati (sensori) per aggiornare una colonna in tutte le righe? Non riuscivo a capire la sintassi per questo, così ho provato a fare questo:
session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_serial_numbers'])).update({'system_id': system.id})
Ma che non riesce fino in fondo nelle ciotole di 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.
penso che deve essere a causa della clausola in_, dato che ho fatto degli aggiornamenti prima di usare lo stesso costrutto, ma non avevano una clausola in_. Come potrei fare un aggiornamento come questo con un in_?
Grazie mille. Questo funziona. Ma puoi dirmi perché questo codice funziona anche senza 'synchronize_session'' session.query (ApplicationInstallation) .filter_by (control_hub_id = hub_id) .filter (ApplicationInstallation.removal_date == None) .update ({'removal_date': utc_now}) ' –
@LarryMartell Quando si utilizza' in_', distintamente o meno, è necessaria una query di selezione per consentire a MetaData di decidere quale dei suoi oggetti in memoria scadrà. Puoi vedere la query di selezione se la modalità eco è attivata, ma non so perché è progettata in questo modo. – kxxoling
Qualcuno può spiegare "Se la valutazione dei criteri non è implementata, viene sollevata un'eccezione" per favore? Il * recupero * è abbastanza semplice ma * valutare * sembra un po 'un mistero per me ... – Son