2012-04-09 126 views
1

我正在做一个NDB查询,这似乎只是获取部分对象。对于模型,我已经关闭了缓存,以防万一。然而,当我看到它们填充在数据存储查看器中时,许多属性都返回无。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()返回旧的东西。

+0

你确定前端正在改变现有实体的属性而不是创建新实体吗? (如果它意外地创建了新实体,这可以解释为什么你会看到新的值,但是你的程序看到了旧值。)也许你可以显示编辑实体的代码? (或者只是说“不,我检查过,没有发生”)。 – 2012-04-09 18:30:34

+0

我只能看到数据存储查看器中已更改的实体(仅用于测试的两个实体) – 2012-04-09 19:39:57

+0

您确定使用该任务没有任何意义队列?每当实体发生更改时,您都可以从前端插入任务,而不是通过后端轮询更改。 – 2012-04-10 05:42:11

回答

1

您需要清除循环顶部的上下文缓存,例如,

while 1: 
    ndb.get_context().clear_cache() 
    <rest of your code>