1

我目前正在了解有关 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”函数为用户提交到数据存储区的所有帖子定义了一个父键,我们将其命名为“默认”。所以基本上,用户提交的所有帖子都存储在一个名为“Guestbook”的实体中,我们为它的父级(不存在)定义一个名为“default”的键。

无论我在哪里理解错误,请纠正我。

4

1 回答 1

0

这实际上取决于您如何使用此密钥。现在,它只是一个名字。如果put()是这样,您将放置一个Guestbook名为“default”的类型。

但是,如果您将它用作父级,那么您的代码可能如下所示:

post = Post(parent=guestbook_key())
post.comment = "This is a new post!"
post.put()

在这种情况下,新Post对象将以Guestbook名称为“default”的对象作为父对象。然后,您可以使用祖先查询来获取给定留言簿的所有Posts。

您可能选择这样做的原因(而不是,例如,在每个帖子上都有一个带有留言簿名称的属性)是因为它保证了高度一致的结果。这基本上允许所有请求查看留言簿的一致视图。如果您没有高度一致的结果,您可能会看到用户写了帖子但当他们查看留言簿时没有出现的情况。

您是正确的,您实际上不需要创建Guestbook实体。当您定义父键时,它实际上是在创建一个键,其中父键是子键的前缀

于 2013-11-05T18:10:14.583 回答