谷歌应用引擎ndb:获取实体的ID

时间:2013-01-22 12:22:47

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

这看起来很简单,但我没有找到如何从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?感谢。

2 个答案:

答案 0 :(得分:38)

如果您拥有,可以通过多种方式获取 ID

带有fetchget

示例

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()

来自Key Class NDB

答案 1 :(得分: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()