这看起来很简单,但我没有找到如何从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?感谢。
答案 0 :(得分:38)
如果您拥有键,可以通过多种方式获取 ID 。
带有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()
如果您不需要该实体但仅限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()
答案 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()