通过密钥字符串获取实体,谷歌应用引擎ndb(数据存储区)

use*_*321 3 google-app-engine python-2.7 app-engine-ndb google-cloud-datastore

我正在使用谷歌应用程序引擎与python.服务器从用户获得实体密钥,然后我使用此代码来实现:

 key.get()
Run Code Online (Sandbox Code Playgroud)

但我也希望获得该实体,只要它与特定模型相关,我该怎么做?我知道我可以通过这段代码做到这一点:

MyModel.get_by_id('my_key')
Run Code Online (Sandbox Code Playgroud)

但这只适用于key_name和id,在我的情况下我使用密钥?

Ani*_*Ani 5

从服务器获取用户提供的密钥作为urlsafe字符串后,构造NDB密钥,例如:

key = ndb.Key(urlsafe=string)
Run Code Online (Sandbox Code Playgroud)

我不确定,为什么你不在key.get()导入后简单使用MyModel:-)

但是,这是使用其ID(无论是字符串还是整数)获取实例的方式:

MyModel.get_by_id(key.id(), parent=key.parent(), app=key.app(), namespace=key.namespace())
Run Code Online (Sandbox Code Playgroud)

除非您使用多个名称空间或应用程序ID,否则关键字是可选的,或者MyModel是实体组中的子类.

或者,使用key.string_id()key.integer_id()

安全警告:由于您的应用程序接受用户提供的密钥,请注意即使是隐秘查看的URL安全密钥也可以轻松编码/解码.

有关详细信息,请参阅NDB密钥的参考