爲什麼當它們沒有父(它們是根實體)時,同一實體組中沒有同類實體?這是否意味着,如果我想從MySQL的數據寫入例如批量操作做HRD:爲什麼同一實體組中不存在同一種類的實體
db.put([Person(name=person.name) for person in cursor.execute("SELECT * FROM person")])
,我必須使用事務出於這個原因:
注:批處理調用數據庫.put()或db.delete()可能對一些實體而不是其他實體成功。如果調用完全成功或完全失敗很重要,則必須使用事務,並且所有受影響的實體必須位於同一個實體組中。
來源:https://developers.google.com/appengine/docs/python/datastore/entities#Batch_Operations
我需要建立一個共同的根源主密鑰,它不存在,因爲只有用於交易的目的真正的實體?
parent_key = db.Key.from_path('Human', 'human')
db.put([Person(parent=parent_key, name=person.name) for person in cursor.execute("SELECT * FROM person")])
*就您的情況而言,最好不要在事務中運行該操作,並且需要額外的代碼來處理失敗情況。*我正在查看put操作的API:https://developers.google.com/appengine/docs/ python/datastore/functions#put,它確實表示如果某些實體失敗,可以捕獲該異常:*如果在操作過程中發生任何錯誤,即使某些實體已被寫入,也會始終引發異常。如果調用返回時沒有引發異常,那麼所有的實體都寫成功了。但是,您如何知道應該重複哪些實體? –
@Jernej:你沒有。這就是爲什麼GAE文檔說你在事務中的操作應該是_idempotent_(即重複操作產生相同的結果)。 –