Google App Engine NDB自定义密钥ID

时间:2012-10-24 21:50:02

标签: python google-app-engine app-engine-ndb djangoappengine

当我使用ndb的方法创建一个对象时,它会自动创建Key类型(kind,id),其中id是一个数字。在整个文档中,它显示您可以使用字符串作为密钥的id,但是在创建对象时我无法找到如何自动执行此操作。

我有一个用户模型,我正在考虑使用用户的用户名(因为它的唯一)作为密钥的ID,以便更快地检索。这是一个好主意吗?我是否会对用户名有任何问题,因为它是用户提交的(我正在验证输入)?

3 个答案:

答案 0 :(得分:30)

class UserModel(ndb.Model):
  ...

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

如果这些ID可能会发生变化,这可能是一个坏主意。如果它是您自己的系统并且您可以对潜在的更改做出反应,那么这是一个好主意,但您需要确保ID在决定使用它们之前是唯一且相对稳定的。

答案 1 :(得分:13)

您可以在创建时指定实体的ID。定义模型时,不要在其中设置id属性。因此,例如你有:

class User(ndb.Model):
    # fields here

创建模型时,您有:

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

由于用户名是唯一的,并且您验证了输入,因此您不会遇到任何问题。

有关ndb Model构造函数的详细信息,您可以查看NDB Model Class - Constructor

希望这有帮助。

答案 2 :(得分:0)

您还可以为模型实体提供整数ID(不一定是字符串)。

class User(ndb.Model):
...

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