我想以编程方式和手动方式插入新实体。为此,我考虑使用key_name唯一标识实体。
问题是我在创建实体时不知道如何让模型生成新的唯一键名。
另一方面,我无法手动创建ID(在数据存储中是唯一的)。
如果提供的值为None,我该怎么办“创建唯一的密钥名称”?
感谢您的帮助!
答案 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,那么只需创建实体(不传递key
或key_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()