2015-11-13 14 views
7

Gerçekten 2 soru burada ayarlayın.sqlchemy sonucu güncelleme için aşağıdaki

Böyle bir sqlalchemy sorgusu çalıştırmak:

sensors = session.query(Sensor).filter(Sensor.serial_number.in_(data['sensor_serial_numbers'])).all() 

Sonra tüm bu satırlarda bir sütunu güncelleştirmek için sonuç kümesini (sensörler) kullanabilir miyim?

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. 

Bunun nedeni olmalıdır düşünüyorum: Bunun için sözdizimi çözemedim, bu yüzden bunu denedim:

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

Ama bu sqlalchemy kasesinde yolu aşağı başarısız in_ fıkra, aynı yapıyı kullanmadan önce güncellemeler yaptım, ancak bir in_ maddesi içermediler. Nasıl bir in_ ile böyle bir güncelleme yapabilirim?

cevap

14

bu deneyin:

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

Burada belgelenir: doc

varsayılan değer

düz oturumda nesneler üzerinde Python Sorgusu kriterlerini değerlendirin evaluate olduğunu. Ölçütlerin değerlendirilmesi uygulanmazsa, istisnası ortaya çıkar.

+0

Çok teşekkür ederim. Bu çalışıyor. Ama lütfen bu kodun neden "synchronize_session" 'session.query (ApplicationInstallation) .filter_by (control_hub_id = hub_id) .filter (ApplicationInstallation.removal_date == None) .update ({'removal_date': utc_now}) olmadan da çalıştığını söyler misiniz?) ' –

+2

@LarryMartell" in_ "ifadesini açıkça kullanıp kullanmamanız durumunda, MetaData'nın bellek içi nesnelerinin süresinin dolmasına karar vermek için bir seçim sorgusu gereklidir. Eko modu etkinleştirildiğinde seçim sorgusunu görebilirsiniz, ancak bunun neden böyle tasarlandığını bilmiyorum. – kxxoling

+0

"Herhangi bir kriter değerlendirilmediğinde istisna kaldırılır" açıklamasının herhangi biri açıklanabilir mi? * Getir * oldukça düz ileri ama * değerlendirmek * bir bana biraz gizem gibi görünüyor ... – Son