Подтвердить что ты не робот

Идентификатор клиентского ключа Google App Engine NDB

Когда я создаю объект с помощью метода ndb, он автоматически создает ключ типа Key (kind, id), где id - число. По всей документации он показывает, что вы можете использовать строку для идентификатора ключа, но я не мог узнать, как это сделать автоматически при создании объекта.

У меня есть модель User, и я думал использовать имя пользователя пользователя (с его уникального) в качестве ключевого идентификатора для более быстрого поиска. Это даже хорошая идея? У меня возникнут проблемы с именем пользователя, так как он отправлен пользователем (я проверяю ввод)?

4b9b3361

Ответ 1

class UserModel(ndb.Model):
  ...

user_model_entity = UserModel(id='some_string', ...)

Если эти идентификаторы могут быть изменены, это может быть плохой идеей. Если это ваша собственная система, и вы можете реагировать на возможные изменения, это прекрасная идея, но вам нужно убедиться, что идентификаторы будут уникальными и относительно стабильными, прежде чем принимать решение об их использовании.

Ответ 2

Вы указываете идентификатор объекта во время создания. Когда вы определяете модель, вы не устанавливаете там атрибут id. Таким образом, например, у вас есть:

class User(ndb.Model):
    # fields here

При создании модели у вас есть:

user = User(id='username', ...)

Поскольку имя пользователя уникально, и вы проверяете ввод, то у вас не будет проблем с этим подходом.

Для получения дополнительной информации о конструкторе ndb Model вы можете взглянуть на NDB Model Class - Constructor.

Надеюсь, что это поможет.

Ответ 3

Вы также можете указать целочисленный идентификатор (не обязательно строку) для вашего объекта модели.

class User(ndb.Model):
...

user = User(id=1234567890, ...)
user.put()