有趣的GAE:使用key_name作为PK?

时间:2011-08-02 07:52:00

标签: python google-app-engine

我想以编程方式和手动方式插入新实体。为此,我考虑使用key_name唯一标识实体。

问题是我在创建实体时不知道如何让模型生成新的唯一键名。

另一方面,我无法手动创建ID(在数据存储中是唯一的)。

如果提供的值为None,我该怎么办“创建唯一的密钥名称”?

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

如果你真的需要字符串id(而不是自动分配的整数id),你可以使用随机字符串生成器,或uuid.uuid4之类的唯一id生成器。

答案 1 :(得分:1)

我真的不明白你的问题。如果您想要一个自动生成的密钥名称,只需在实例化对象时省略密钥 - 当您调用put()时,将自动分配一个密钥。

答案 2 :(得分:1)

Google App Engine会自动为实体分配一个整数ID,但不会指定名称。

如果要获得此行为,可以继承db.Model并将构造函数替换为发明键名称的内容。如何创建名称本身是另一回事,但您可以使用UUID as suggested by moraes here

答案 3 :(得分:1)

如果您希望实体在大多数情况下都自动分配ID,那么只需创建实体(不传递keykey_name),该密钥将自动分配,您的实体将.key().id()可用。

如果有时您需要手动分配数字ID,那么您可以reserve a block个ID,以便AppEngine永远不会自动分配它们,然后您可以使用此保留范围内的id您想要为已知实体分配ID。要为实体分配ID,请为该实体创建Key

# reserve ids 4000 to 5000 for use manually on the Customer entity
db.allocate_id_range(db.Key.from_path('Customer',1),4000,5000)

# manualy create a customer with id 4501
bob = Customer(key=db.Key.from_path('Customer',4501), name='bob')
bob.put()