Google app engine Google应用程序引擎数据存储:创建和使用没有实体的密钥

Google app engine Google应用程序引擎数据存储:创建和使用没有实体的密钥,google-app-engine,google-cloud-datastore,google-app-engine-python,Google App Engine,Google Cloud Datastore,Google App Engine Python,我有一个奇怪的问题要问你们这些谷歌数据存储专家。 我一直在研究谷歌应用程序引擎的代码。 我发现这些代码行让我感到困惑 guestbook_key = ndb.Key(Greeting, DEFAULT_GUESTBOOK_NAME) mykey = ndb.Key( Greeting, # kind str(i+1), # id parent=guestbook_key # parent ) g

我有一个奇怪的问题要问你们这些谷歌数据存储专家。 我一直在研究谷歌应用程序引擎的代码。 我发现这些代码行让我感到困惑

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”的实体(我搜索了整个代码,但没有找到任何东西) 是否仅为给实体提供公共根而创建,而不创建实体根

是的。来自(我的):

在示例中,
('Account','sandy@foo.com)
('Message',123)
,以及
('Revision','1')
都是种类标识符对的示例

注意,
消息
不是一个模型类;它仅用于对修订进行分组,而不是存储数据。

可以使用命名参数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')))
在上面引用的示例中,
消息
实体键用作
修订版
实体的祖先键/父键,而实际不存在
消息
实体


另一个这样的例子,这一次显示了整个实体组的根(公共祖先)实际上并不存在:

键只是程序内存中的一个对象,甚至在将任何内容写入数据存储之前


将实体写入数据存储时,需要提供密钥(完整,如果需要自动ID,则不完整)和数据本身。

是的,文档明确说明可以创建不引用实际实体的父密钥。
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')))