在Google App Engine中设置NDB中的实体密钥

时间:2016-11-17 01:22:16

标签: google-app-engine google-cloud-datastore app-engine-ndb

如何在代码中设置entity的密钥。

示例,我有一个用户类

class User(ndb.Model)
  email

我希望能够使用电子邮件属性设置电子邮件属性和查询

my_user = User(email='xyz@ab.com')

上述语句设置了电子邮件属性,但Google App Engine会生成自己的密钥。

我可以使用User(key='xyz@ab.com')

设置密钥

如果我可以在实体中设置密钥属性,如何使用密钥

查询实体

这是否有效 User.query(key='xyz@ab.com')。得到()

我意识到我可以使用email作为属性进行查询,但遗憾的是我无法在transaction的上下文中进行查询。

这就是我问如何通过键获取(),set()的原因。

另外,当我最终按属性查询时,我需要在属性上创建索引,我知道这些索引是唯一的

1 个答案:

答案 0 :(得分:2)

是的,但它不是my_user = User(key='xyz@ab.com'),它是:

my_user = User(id='xyz@ab.com')
my_user_key = my_user.put()

现在,my_user_key是关键,因此您可以通过以下方式获取:

the_user_entity = my_user_key.get()

或者,稍后,您可以通过构建密钥来获取它:

my_user_key = ndb.Key(User, id='xyz@ab.com')
the_user_entity = my_user_key.get()

或直接通过:

User.get_by_id('xyz@ab.com')