2017-05-09 18 views
1

我最近將實體從名稱空間移動到了另一個名稱空間並添加了父項。從那時起,我注意到出現以下錯誤:爲新實體分配的標識已被使用

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。

我真的想防止這種情況,因爲這會導致不成功的請求。我發現了許多舊的db API的解決方案,這些解決方案涉及分配具有麻煩的特定ID,以便生成器知道這些ID存在。但我似乎無法爲ndb模型分配一個特定的ID。

我試圖使用重試來重試放置模型,但這也似乎沒有幫助。

有什麼辦法解決這個問題嗎?

回答

0

我還沒有測試過這個,但我認爲一個解決方案是使用allocate_ids(1,parent = old_parent_key)並使用new_parent_key來創建您將要使用的實際密鑰。

id = ndb.Model.allocated_ids(size=1, parent=old_parent_key)[0] 
key = ndb.Key(cls, id, parent=new_parent_key). 

所以old_parent_key是您以前使用的父母,與您共創鍵和new_parent_key(你現在正在使用)。據我所知,allocate_ids實際上並沒有獲取實體。

see ndb id allocation

相關問題