Идентификатор клиентского ключа Google App Engine NDB
Когда я создаю объект с помощью метода ndb, он автоматически создает ключ типа Key (kind, id), где id - число. По всей документации он показывает, что вы можете использовать строку для идентификатора ключа, но я не мог узнать, как это сделать автоматически при создании объекта.
У меня есть модель User, и я думал использовать имя пользователя пользователя (с его уникального) в качестве ключевого идентификатора для более быстрого поиска. Это даже хорошая идея? У меня возникнут проблемы с именем пользователя, так как он отправлен пользователем (я проверяю ввод)?
Ответы
Ответ 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()