【发布时间】:2016-06-22 18:43:53
【问题描述】:
我在查询数据存储时遇到了一个非常违反直觉的情况。
步骤如下:
使用第一个查询检索对象:
list_objects = MyModel.query(cls.name == name).fetch()修改list_objects:
for o in list_objects: o.value = new_value第二次检索对象:
list_objects_2 = MyModel.query(cls.name == name).fetch()-
现在 list_objects_2 中的所有对象都有 new_value,尽管在第 2 步中,从未调用 put 来实际修改数据存储,我检查了我的数据存储,其值为原始值
修改list_objects_2:
for o in list_objects_2: o.value = new_new_value,现在list_objects1都有new_new_value
我也试过fetch(keys_only = True) 和k.get(),但同样的问题。
我的印象是查询是针对实际数据存储的,为什么它一直返回相同的实例而不是构造新的实例?是因为某种缓存吗?
【问题讨论】:
-
听起来不对,你能举出可重现的例子吗?
标签: google-app-engine app-engine-ndb google-cloud-datastore