Database Google应用程序引擎:数据存储父密钥混淆
我目前正在学习有关Google App Engine数据存储的更多信息,我对定义父密钥的概念的理解有一些疑问。下面是从GAE文档中定义父密钥的代码:Database Google应用程序引擎:数据存储父密钥混淆,database,google-app-engine,python-2.7,parent-child,Database,Google App Engine,Python 2.7,Parent Child,我目前正在学习有关Google App Engine数据存储的更多信息,我对定义父密钥的概念的理解有一些疑问。下面是从GAE文档中定义父密钥的代码: def guestbook_key(guestbook_name="default"): """Constructs a Datastore key for a Guestbook entity with guestbook_name.""" return ndb.Key('Guestbook', guestbook_name)
def guestbook_key(guestbook_name="default"):
"""Constructs a Datastore key for a Guestbook entity with guestbook_name."""
return ndb.Key('Guestbook', guestbook_name)
注意:此代码包含在应用程序的源代码中,该应用程序接受来自用户的条目,并将其存储在数据存储中,并将它们集中显示在主页上
现在,这是我从这段代码中了解到的(如果我对这个概念的理解不是它应该是什么,请纠正我):
“guestbook_key”函数为用户提交到数据存储中的所有帖子定义了一个父键,我们将其命名为“default”。因此,基本上,用户提交的所有帖子都存储在一个名为“Guestbook”的实体中,我们为它的父项(不存在)定义了一个名为“default”的键
无论我的理解哪里出错,请纠正我 这取决于你如何使用这把钥匙。现在,它只是一个名字。如果您
put()
it,则您正在放置一个名为“default”的Guestbook
类型
但是,如果将其用作父级,则可能会有如下代码:
post = Post(parent=guestbook_key())
post.comment = "This is a new post!"
post.put()
在这种情况下,新的Post
对象将具有名为“default”的Guestbook
对象作为父对象。然后,您可以使用获取给定留言簿的所有Post
s
您可能选择这样做的原因(而不是,例如,在每个帖子上都有一个带有留言簿名称的属性)是它保证了结果。这基本上允许所有请求查看留言簿的一致视图。如果您的结果不一致,您可能会看到这样的情况:用户写了一篇文章,但当他们查看留言簿时,却没有出现
您确实不需要创建Guestbook
实体。定义父键时,它实际上是在创建一个键