Google app engine ndb: получить идентификатор объекта - программирование
Подтвердить что ты не робот

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)

Теперь, как получить идентификатор сообщения? Спасибо.

4b9b3361

Ответ 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()