Google app engine ndb: получить идентификатор объекта
Это выглядит просто, но я просто не нашел, как получить идентификатор объекта из Google App Engine ndb.
class Message(ndb.Model):
name: ndb.StringProperty()
...
Создать объект сообщения:
message = Message(id=someId)
message.name = someName
message.put()
Позже, когда я получаю объект:
message = Message.query(Message.name==someName).fetch(1)
Теперь, как получить идентификатор сообщения? Спасибо.
Ответы
Ответ 1
Вы можете получить 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()
Из Key NDB класса
Ответ 2
Попробуйте использовать 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()