強制性博客示例設置; Authors
有Posts
class Author(db.Model):
name = db.StringProperty()
class Post(db.Model):
author = db.ReferenceProperty()
article = db.TextProperty()
bob = Author(name='bob')
bob.put()
要記住第一件事是在一個單一的實體組(包括單一實體),經常GET/PUT /刪除將作爲預期:
post1 = Post(article='first article', author=bob)
post1.put()
fetched_post = Post.get(post1.key())
# fetched_post is latest post1
你只能通知如果您開始在多個實體組之間進行查詢,則會出現不確定性。除非您已指定parent
屬性,否則您的所有實體都位於不同的實體組中。所以,如果重要的是後直bob
創建了一個帖子,說他可以看到有自己的職位的話就要小心了以下內容:
fetched_posts = Post.all().filter('author =', bob).fetch(x)
# fetched_posts _might_ contain latest post1
fetched_posts
威力包含來自bob
最新post1
,但它可能不。這是因爲所有Posts
都不在同一個實體組中。當在HR中這樣查詢時,你應該認爲「可能是我的最新帖子」。
由於作者在創建後可以在列表中直接看到他的帖子,因此我們將使用parent
屬性將它們綁定在一起,並使用ancestor
查詢來僅從該內容中獲取帖子組:
post2 = Post(parent=person, article='second article', author=bob)
post2.put()
bobs_posts = Post.all().ancestor(bob.key()).filter('author =', bob).fetch(x)
現在我們知道這post2
將在我們bobs_posts
結果。
如果我們的查詢的目的是爲了獲取「可能所有最新的帖子+鮑勃最新的帖子」我們需要做另一個查詢。
other_posts = Post.all().fetch(x)
那麼結果other_posts
和bobs_posts
合併在一起,以獲得所需的結果。
對不起,我沒有一個具體的例子。我在學習這個系統,所以我可以開始做我的項目。我只想將數據存儲在數據存儲中,並在需要時檢索最新版本。我只是想弄清楚什麼時候不是這種情況,以及我如何保證在查詢結果時我會得到最新的結果。通過「查詢」我的意思是通過屬性查詢,就像SQL中的一樣,而不是按鍵。我只想了解祖先團體的意思是「一致性的單位」,什麼可以是「不一致的」。 – amatsukawa 2011-05-30 19:43:43
Nick,在此文檔的使用說明部分:http://code.google.com/intl/zh-CN/appengine/docs/python/datastore/hr/overview.html說,「您可以將最近發佈的內容放入memcache中過期,然後顯示來自memcache的最近發佈的帖子和從數據存儲中檢索的帖子。「 – fjsj 2011-09-07 13:31:20
@ user439383(你有沒有考慮過設置一個更有用的用戶名?)我個人不會再擔心這件事,除非你有特定的情況它是關心的。最終一致的語義在大多數情況下都很好,你會知道什麼時候需要強大的一致性。 – 2011-09-08 00:45:09