python - NDB 查询返回零结果。数据存储显示结果

标签 python google-app-engine google-cloud-datastore app-engine-ndb

我在运行查询、确认记录存在、返回计数为零时发现了这个特殊问题。

这是我的模型:

class Description(ndb.Model):
    description = ndb.TextProperty()
    time_posted = ndb.DateTimeProperty(auto_now_add=True)
    uuid = ndb.StringProperty()

class Examine(ndb.Model):
    updated = ndb.DateTimeProperty(auto_now=True, auto_now_add=True)
    descriptions = ndb.StructuredProperty(Description, repeated=True)
    active = ndb.KeyProperty(kind=Description)
    slug = ndb.StringProperty(indexed=True)

假设我正在运行以下命令,确认数据存储中确实存在特定的 UUID:

d_id = 'ef531b70-3486-11e3-9500-ef31d661e6b2'
cnt = Description.query(Description.uuid == d_id).count()

我将收到 0 作为 cnt 的结果。有人可以向我解释为什么会这样吗?

最佳答案

数据存储查询最终是一致的。这意味着如果基础数据发生变化,有时查询将无法反射(reflect)这种变化。

要解决此问题,您可以构建数据存储和查询以保持高度一致:https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

如果描述实体保存在 examine 的父键中,则以下查询将是强一致的:

cnt = Description.query(ancestor=ExamineKey).filter(Description.uuid == d_id).count()

关于python - NDB 查询返回零结果。数据存储显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353509/

相关文章:

google-app-engine - App Engine 在某些请求上静默失败

google-app-engine - 使用单个查询获取整个实体组

python - 创建一个新变量,它是 Python 中两个变量的最小值

python - 如果元组有一个共同元素,则合并元组

python - 我什么时候应该在笔记本中模块化代码

google-app-engine - Google 应用引擎中祖先交易每秒 1 次的限制是什么意思?

java - 排序和过滤在 Google 应用引擎中不起作用

python - 当前使用的 Python 版本是什么,包应该支持哪些版本?

java - 专用 MySql 服务器与应用程序引擎配合使用

python - 在 Ubuntu 14.04 上安装 python 谷歌云存储客户端