15

这看起来很简单,但我只是没有找到如何从 Google App Engine 的 ndb 获取实体的 id。

class Message(ndb.Model):
    name: ndb.StringProperty()
    ...

创建一个消息对象:

message = Message(id=someId)
message.name = someName
message.put()

后来当我检索实体时:

message = Message.query(Message.name==someName).fetch(1)

现在我如何获得消息的ID?谢谢。

4

2 回答 2

38

只要您有密钥,您就可以通过多种方式获取id

带有fetchor的示例get

message = Message.query(Message.name==someName).fetch(1)[0]
message_id = message.key.id()

message = Message.query(Message.name==someName).get()
message_id = message.key.id()

如果您不需要实体而只需要 id,那么您可以通过仅获取密钥来节省资源。

message_key = Message.query(Message.name==someName).fetch(1, keys_only=True)[0]
message_id = message_key.id()

message_key = Message.query(Message.name==someName).get(keys_only=True)
message_id = message_key.id()

请记住,您也可以在put后​​获得密钥:

message_key = message.put()
message_id = message_key.id()

来自关键类 NDB

于 2013-01-22T12:58:49.843 回答
1

尝试对单个实例使用 get()

message = Message.query(Message.name==someName).get()
message.key.id()

fetch() 返回一个列表对象,因此您的代码需要大致如下:

messages = Message.query(Message.name==someName).fetch(1)
message = messages[0]
message.key.id()
于 2014-02-07T00:01:17.983 回答