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

Ran*_*ang 15 google-app-engine app-engine-ndb

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

class Message(ndb.Model):
    name: ndb.StringProperty()
    ...
Run Code Online (Sandbox Code Playgroud)

创建一个消息对象:

message = Message(id=someId)
message.name = someName
message.put()
Run Code Online (Sandbox Code Playgroud)

后来当我检索实体时:

message = Message.query(Message.name==someName).fetch(1)
Run Code Online (Sandbox Code Playgroud)

现在如何获取消息的ID?谢谢.

Jim*_*ane 38

只要有钥匙,您就可以通过多种方式获取身份证.

fetch或的示例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()
Run Code Online (Sandbox Code Playgroud)

如果您不需要实体但需要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()
Run Code Online (Sandbox Code Playgroud)

请记住,您也可以在放置后获得密钥:

message_key = message.put()
message_id = message_key.id()
Run Code Online (Sandbox Code Playgroud)

来自Key Class NDB

  • 或者在put之后:message_id = message.put().id() (5认同)