【问题标题】:NDB Query not returning full objectNDB 查询未返回完整对象
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多