簡體   English   中英

使用Google Appengine在數據存儲區中創建父級關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM