2

我發現這個奇怪的問題,運行一個查詢,確認該記錄存在,返回一個零計數。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。有人可以向我解釋爲什麼會發生這種情況嗎?

回答

1

數據存儲查詢最終是一致的。這意味着如果底層數據發生變化,有時一個查詢將無法反映這種變化。

爲了解決這個問題,你可以組織你的數據存儲和查詢是強一致的:https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

如果說明實體保存研究的父項內,則下面的查詢會強烈一致:

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