我正在尝试使用单个祖先创建一个根实体。当我试图从那个单一的祖先那里得到父密钥时,我得到了“没有”#39;我在这里缺少什么?
以下是我的示例代码:
# 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数据类型,但这似乎是一个更自然的数据模型,因此更多的Pythonic。
答案 0 :(得分:1)
键是指从孩子到父母的内容。如果您打印了孩子的密钥的解码值,您会看到类似[Page, 'home', Page, <long number>]
的内容,其中&#34; home&#34;是父手动分配的密钥名称,长号是子项的自动生成的密钥ID。
你的问题只是祖先查询返回祖先和子节点,query.get()
返回该查询的第一个结果,即祖先本身。如果您输出child.fetch()
的结果,您也会看到您的孩子。
请注意,添加time.sleep
并不会做任何事情来缓解任何一致性问题,因为开发数据存储区会根据请求而非时间模拟最终的一致性。但无论如何,无论如何,通过钥匙或祖先获得总是一致的。