。。。当我尝试执行如下查询时:
Session().query(MyMappedClass).update({MyMappedClass.time:func.now()})
我得到:
InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.
但如果我这样做:
Session().query(MyMappedClass).update({MyMappedClass.time:'now()'})
它是有效的。有人知道为什么吗?
这在update()的文档中有解释
synchronize_session–
选择更新中对象的属性的策略一场有效值为:
False-不同步会话。此选项是最多的会话过期后高效可靠,这通常发生在commit()之后,或显式使用expire_all()。在过期,更新后的对象可能仍保留在会话中值,这可能导致混淆的结果。
"fetch"-在更新之前执行选择查询以查找对象更新查询匹配的。更新的属性为已在匹配的对象上过期。
"evaluate"-直接在对象。如果未对标准进行评估实现时,会引发异常。
update()默认情况下会刷新会话中缓存的那些对象,而不进行数据库往返。func.now()
是一个SQL函数,需要进行此往返。发送字符串"now()"
不是您想要的,因为这会将字段的值设置为字符串"now()",并且实际上不会使用SQL时间函数。您应该将synchronize_session=False传递给update()。