对于Google Datastore专家,我有一个奇怪的问题。 我一直在研究正在运行的Google App Engine应用程序的代码。 我发现这些代码行让我感到困惑。
guestbook_key = ndb.Key(Greeting, DEFAULT_GUESTBOOK_NAME)
mykey = ndb.Key( Greeting, # kind
str(i+1), # id
parent=guestbook_key # parent
)
g = Greeting(key=mykey)`
我的问题是:作为父母,是否可以使用不存在的实体的密钥? 我说是因为没有带键的实体" guestbook_key"已经创建(我在整个代码中搜索但我没有找到任何东西) 它是否仅为在不创建实体根的情况下为实体提供公共根而创建?
答案 0 :(得分:0)
是。来自Using the ancestor path in the key(强调我的):
ndb.Key('Account', 'sandy@example.com', 'Message', 123, 'Revision', '1')
...
在示例中,
('Account', 'sandy@foo.com')
,('Message', 123)
和('Revision', '1')
都是种类 - 标识符对的示例。请注意
Message
不是模型类;它仅用作组合修订的方式,而不是用于存储数据。...
您可以使用命名参数parent来指定中的任何实体 祖先的道路直接。以下所有符号均代表 相同的关键:
ndb.Key('Account', 'sandy@example.com', 'Message', 123, 'Revision', '1') ndb.Key('Revision', '1', parent=ndb.Key( 'Account', 'sandy@example.com', 'Message', 123)) ndb.Key('Revision', '1', parent=ndb.Key( 'Message', 123, parent=ndb.Key('Account', 'sandy@example.com')))
在上面引用的示例中,Message
实体密钥用作Revision
实体的祖先/父密钥,而实际不存在Message
个实体。
另一个这样的例子,这次显示了实际上并不存在的整个实体组的根(共同祖先):What would be the purpose of putting all datastore entities in a single group?
答案 1 :(得分:0)
即使在将任何内容写入数据存储区之前,密钥也只是程序内存中的一个对象。
当您将实体写入数据存储区时,您需要提供密钥(如果您需要自动ID,则完整或不完整)以及数据本身。