Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Google应用程序引擎:数据存储父密钥混淆_Database_Google App Engine_Python 2.7_Parent Child - Fatal编程技术网

Database Google应用程序引擎:数据存储父密钥混淆

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)

我目前正在学习有关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)
注意:此代码包含在应用程序的源代码中,该应用程序接受来自用户的条目,并将其存储在数据存储中,并将它们集中显示在主页上

现在,这是我从这段代码中了解到的(如果我对这个概念的理解不是它应该是什么,请纠正我):

“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
实体。定义父键时,它实际上是在创建一个键