我將一個NDB密鑰()與一個父節點傳遞給一個延遲函數。在這個函數中,我再次檢索實體。但我不能使用傳遞的鍵直接獲取實體。我必須改變ndb.Key()中的鍵順序配對。如何傳遞一個父節點的NDB密鑰並用它來獲取實體
deferred.defer(my_deferred.a_function, entity.key)
的entity.key()看起來像:
Key('Parents', 'my_parent', 'Childs', 'my_child') # the first pair is the parent?
my_deferred.py:
def a_function(key) :
entity = ndb.Key(key) # the pass entity.key does not work !!!!!
給予例外:ValueError異常:鍵()必須有偶數個位置參數。
entity = ndb.Key('Childs', key.id(), parent = key.parent()).get() # this one works fine
我不明白爲什麼entity.key()方法不給我一個密鑰,我可以直接使用?還是有另一種方法來獲得實體,而不用「更改」密鑰。而且我不明白ValueError的含義。
更新:感謝格雷戈裏
entity = key.get() # works fine
Tahnks爲您的答案。對不起,我錯誤地在我的問題(不是在我的代碼中)entity.key()並將其更改爲entity.key。我曾經讀過:不要將實體傳遞給任務。但是如果我通過鑰匙,只有鑰匙。當我傳遞entity.key時,我不能直接使用密鑰,因爲第一對密鑰持有父節點。 – voscausa
再次閱讀您的答案。我試過:key.get()。是的,這工作正常,謝謝! – voscausa
不用擔心,很高興幫助:) –