Python 为新实体分配的id已在使用中
我最近将实体从一个名称空间移动到另一个名称空间,并添加了一个父名称空间。此后,我注意到出现了以下错误:Python 为新实体分配的id已在使用中,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我最近将实体从一个名称空间移动到另一个名称空间,并添加了一个父名称空间。此后,我注意到出现了以下错误: BadRequestError: the id allocated for a new entity was already in use, please try again: app: "p~appid" name_space: "xyz" path < Element { type: "Challenge" name: "chal" } Element {
BadRequestError: the id allocated for a new entity was already in use, please try again: app: "p~appid"
name_space: "xyz"
path <
Element {
type: "Challenge"
name: "chal"
}
Element {
type: "Answer"
id: 0x14657000000000
}
>
BadRequestError:为新实体分配的id已在使用中,请重试:app:“p~appid”
名称_空格:“xyz”
路径<
元素{
类型:“挑战”
姓名:“查尔”
}
元素{
类型:“回答”
id:0x14657000000
}
>
经过一些研究,我得出结论,这是因为id生成器生成的数字id已经存在。因为我将实体移动到了另一个路径,所以使用了不同的id生成器,并且该生成器不知道现有的id
我真的想防止这种情况发生,因为这会导致请求失败。我为旧的db
api找到了许多解决方案,这些解决方案涉及分配特定的id,这些id很麻烦,因此生成器知道这些id的存在。但是,我似乎无法为ndb模型分配特定id
我曾尝试使用重试来重试放置模型,但这似乎也没有帮助
有什么办法可以解决这个问题吗?我还没有测试过这个问题,但我认为解决方案是使用allocate\u id(1,parent=old\u parent\u key)并使用新的\u parent\u key来创建您将要使用的实际密钥
id = ndb.Model.allocated_ids(size=1, parent=old_parent_key)[0]
key = ndb.Key(cls, id, parent=new_parent_key).
因此,旧的\u parent\u键是您以前使用的父项,您可以使用新的\u parent\u键(您现在正在使用)创建键。据我所知,allocate_ID实际上并没有获取实体
我还没有测试过这一点,但我认为解决方案是使用allocate\u id(1,parent=old\u parent\u key)并使用新的\u parent\u key创建您将要使用的实际密钥
id = ndb.Model.allocated_ids(size=1, parent=old_parent_key)[0]
key = ndb.Key(cls, id, parent=new_parent_key).
因此,旧的\u parent\u键是您以前使用的父项,您可以使用新的\u parent\u键(您现在正在使用)创建键。据我所知,allocate_ID实际上并没有获取实体