[英]Creating parent relationship in datastore using Google Appengine
我正在嘗試創建具有單個祖先的根實體。 當我嘗試從單個祖先獲取父鍵時,我得到“無”。 我在這里想念什么?
這是我的示例代碼:
# create a single root with key_name = 'home'
root = Page.get_or_insert('home')
# delay added for consistency
time.sleep(1)
# create an ancestor with the parent key set to the key of the root
start_page = Page(parent=root.key(), page_name="", content="<h1>welcome home</h1>")
start_page.put()
time.sleep(1)
child = Page.all().ancestor(root.key())
utils.log('==>> %s' % child.get().key())
上面的行輸出根的鍵,而不是子鍵。
為什么是這樣?
當我在本地計算機上查看數據存儲查看器時,將看到以下內容: 我看不到任何涉及其父項的子項數據。
我最終的目標是要從該父母或其他父母那里創建許多子頁面。 我知道ReferenceProperty數據類型,但這似乎是一種更自然的數據模型,因此可以使用更多Python語言。
關鍵是從孩子到父母的含義。 如果您打印了子項密鑰的解碼值,則會看到類似[Page, 'home', Page, <long number>]
,其中“ home”是父級的手動分配密鑰名,而long數字是子代的自動生成的密鑰ID。
您的問題只是祖先的查詢返回祖先及其子項,而query.get()
返回該查詢的第一個結果,即祖先本身。 如果輸出child.fetch()
的結果,您也會看到您的孩子。
請注意,添加time.sleep
根本無法緩解一致性方面的任何問題,因為dev數據存儲區會根據發出的請求而不是時間來模擬最終的一致性。 但是無論如何,無論是按鍵獲取還是按祖先獲取始終是一致的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.