【发布时间】:2012-04-09 14:25:04
【问题描述】:
我正在执行 NDB 查询,它似乎只获取部分对象。对于模型,我已经关闭了缓存,以防万一。但是,当我看到它们在数据存储查看器中填充时,许多属性会返回无。
这是本地开发服务器(并已部署),查询由后端进程完成。
注意:清除内存缓存没有帮助。
注意:如果我导致后端重新启动,它将开始拉取正确的数据。
基本上:
后端每 X 秒开始查询模型实例
前端导致模型实例发生变化
后端继续查看原始版本的实例,直到重新启动
后端代码非常简单:
while 1:
time.sleep(2)
q = None
res = None
q = core.Agent.query()
res = q.fetch(10)
for a in res:
logging.error("%s" % a.to_dict())
前端更改了一些属性(并显示在查看器中),但后端只会显示旧值。似乎过滤器将根据正确的值进行过滤,但 fetch() 返回旧的东西。
【问题讨论】:
-
您确定前端正在更改现有实体的属性而不是创建新实体吗? (如果它意外创建了新实体,这可以解释为什么您会看到新值但您的程序看到旧值。)也许您可以显示编辑实体的代码? (或者只是说“不,我检查过,但没有发生”。)
-
我只在数据存储查看器中看到更改的实体(我的测试只有 2 个实体)
-
您确定使用任务队列不会更有意义吗?您可以在实体更改时从前端插入任务,而不是让后端轮询更改。
标签: google-app-engine datastore app-engine-ndb