3

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

这是我的模型:

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 的结果。有人可以向我解释为什么会这样吗?

4

1 回答 1

1

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

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

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

cnt = Description.query(ancestor=ExamineKey).filter(Description.uuid == d_id).count()
于 2013-10-14T04:57:07.553 回答