当我使用 ndb 的方法 put 创建一个对象时,它会自动创建类型为 Key(kind, id) 的键,其中 id 是一个数字。在整个文档中,它显示您可以使用字符串作为键的 id,但我不知道如何在创建对象时自动执行此操作。
我有一个用户模型,我正在考虑使用用户的用户名(因为它是唯一的)作为键的 id 以便更快地检索。这甚至是个好主意吗?自从用户提交后(我正在验证输入),我会对用户名有任何问题吗?
当我使用 ndb 的方法 put 创建一个对象时,它会自动创建类型为 Key(kind, id) 的键,其中 id 是一个数字。在整个文档中,它显示您可以使用字符串作为键的 id,但我不知道如何在创建对象时自动执行此操作。
我有一个用户模型,我正在考虑使用用户的用户名(因为它是唯一的)作为键的 id 以便更快地检索。这甚至是个好主意吗?自从用户提交后(我正在验证输入),我会对用户名有任何问题吗?
class UserModel(ndb.Model):
...
user_model_entity = UserModel(id='some_string', ...)
如果这些 ID 可能发生变化,这可能是个坏主意。如果它是您自己的系统并且您可以对潜在的更改做出反应,这是一个好主意,但在决定使用它们之前,您需要确保 ID 是唯一的并且相对稳定。
您在创建时指定实体的 ID。定义模型时,您不会在此处设置 id 属性。因此,例如,您有:
class User(ndb.Model):
# fields here
创建模型时,您有:
user = User(id='username', ...)
由于用户名是唯一的并且您验证了您的输入,因此您不会对这种方法有任何问题。
有关ndb Model
构造函数的更多信息,您可以查看NDB 模型类 - 构造函数。
希望这可以帮助。
您还可以为模型实体提供整数 ID(不一定是字符串)。
class User(ndb.Model):
...
user = User(id=1234567890, ...)
user.put()