为新实体分配的id已在美国境内

2024-09-25 00:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近将实体从一个名称空间移动到另一个名称空间,并添加了一个父对象。从那以后,我注意到出现了以下错误:

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
  }
>

经过一番研究,我得出这样的结论:这是因为id生成器生成的数字id已经存在。因为我将实体移动到另一个路径,所以使用了一个不同的id生成器,并且该生成器不知道现有的id。在

我真的很想防止这会导致请求失败。我为旧的dbapi找到了许多解决方案,这些解决方案涉及到分配非常麻烦的特定id,以便生成器知道这些id的存在。然而,我似乎无法为ndb模型分配特定的id。在

我尝试过使用retrying来重试放置模型,但这似乎也没有帮助。在

有没有办法解决这个问题?在


Tags: the对象name模型实体名称idfor
1条回答
网友
1楼 · 发布于 2024-09-25 00:32:29

我还没有对此进行测试,但是我认为一个解决方案是使用allocate_id(1,parent=old_parent_key)并使用新的\u parent_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 parent_密钥(您现在正在使用)创建密钥。据我所知,allocate_id实际上并不获取实体。在

see ndb id allocation

相关问题 更多 >