0

我正在尝试创建一个具有单个祖先的根实体。当我尝试从那个单一的祖先获得父密钥时,我会得到'无'。我在这里错过了什么?使用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()) 

上述输出线的根的密钥,而不是子。

这是为什么?

当我看着我的本地机器上的数据存储浏览器,这是我所看到的: Datastore view 我没有看到这是指其父孩子的任何数据。

我最终的目标是从这个父母或其他父母创建许多子页面。我知道ReferenceProperty数据类型,但是这似乎是一个更自然的数据模型,因此可以使用更多的Pythonic。

回答

1

密钥是指从孩子到父母。如果您打印了孩子密钥的解码值,则会看到类似[Page, 'home', Page, <long number>]的内容,其中“home”是父级的手动分配密钥名称,而长数字是孩子自动生成的密钥ID。

你的问题只是由祖先查询返回祖先以及子女,而query.get()返回该查询的第一个结果,即祖先本身。如果输出child.fetch()的结果,你也会看到你的孩子。

请注意,添加一个time.sleep根本不会做任何事情来缓解任何一致性问题,因为开发数据存储基于请求而不是时间模拟最终一致性。但无论如何,无论如何,按键或始祖总是一致的。

+0

是的,阅读get的文档我现在可以看到get()“执行查询并返回第一个**结果,如果没有找到结果,则返回None”。至于祖先()doc入口并没有说它也会返回祖先,所以我会就此提出一个doc问题。谢谢!! – timebandit 2014-10-20 12:30:26

相关问题