2
我試圖讓一個事務在AppEngine中工作,並且遇到了實體組的問題。我的代碼有點像這樣:Google AppEngine實體組和事務
parent_obj = ClassA.all().get()
def txn():
key_name = 'hash of something here'
if not db.get(db.Key.from_path('ClassB', key_name, parent=parent_obj)):
obj = ClassB(
parent = parent_obj
)
obj.put()
db.run_in_transaction(txn)
......但我得到'無法在事務中的不同實體組上操作'錯誤。我不明白的是,據我所見,我的交易只能在同一組中的實體上操作。也就是說,第6行查詢的「父」與第8行中設置的「父」相同,因此這兩個查詢都與同一個實體組有關。
我只能斷定我對實體組的理解是錯誤的。但是如何?我已經多次閱讀過文檔,但仍然沒有看到我所做的是錯的。
任何想法?謝謝!
非常感謝賴斯,我認爲你是對的。在我的情況下,parent_obj不是None,但我確信我所做的是正確的,我將代碼推送到了生產服務器上,而且看它工作正常。所以我重新啓動了GoogleAppEngine啓動器,它也開始在本地工作。不知道那是怎麼回事! – Mason 2011-05-11 09:04:18
請注意,您的代碼中存在錯誤:您沒有使用給定的key_name創建實體。你正在檢查是否存在某種東西,如果不是你正在創造不同的東西。 – moraes 2011-05-11 09:27:08
謝謝,在簡化問題發佈的過程中,這個錯誤悄然而至。 – Mason 2011-05-11 09:51:02