2017-01-12 3 views
0

Я пытаюсь использовать func в инструкции по обновлению, но я получаю ошибку InvalidRequest (stacktrace ниже). Вот код:SQLAlchemy ORM: Использование func в обновлении

session.query(C).filter(
    z == True, 
).update({ 
    C.x: func.sqrt((C.y1 + C.y2) * 0.675) 
}) 

И вот StackTrace:

File "/var/xxx/vagrant-env/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3288, in update 
    update_op.exec_() 
    File "/var/xxx/vagrant-env/local/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 1167, in exec_ 
    self._do_pre_synchronize() 
    File "/var/xxx/vagrant-env/local/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 1236, in _do_pre_synchronize 
    "Could not evaluate current criteria in Python. " 
sqlalchemy.exc.InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter. 

Я попытался с обоих func.sqrt и func.round, но они оба дают вышеуказанную ошибку. Любые мысли о том, что я делаю неправильно?

ответ

1

Вы должны указать synchronize_sessionstrategy - False, 'fetch' или реализации evaluate. Просто добавьте его в качестве параметра, например

session.query(C).filter(
    z == True, 
).update({ 
    C.x: func.sqrt((C.y1 + C.y2) * 0.675) 
}, synchronize_session='fetch') 
+0

Это сработало, спасибо большое! – user2449397

Смежные вопросы