2014-07-05 31 views
1
records_to_put = [] 
events_to_put = [] 

record = Record.get_or_insert(json_record['record_id'], ...) 
records_to_put.append(rec) 

event = Event.get_or_insert(json_event['event_id'], parent=record.key) 
events_to_put.append(event) 

ndb.put_multi_async(records_to_put) 
ndb.put_multi_async(events_to_put) 

Event將永遠是Record的孩子。由於異步性質,如果event實例首先保存,但它的父實例尚未保存,會發生什麼情況。它會拋出異常還是允許這樣做?如何在異步保存父/子實體時處理父實體?

回答

0

如果記錄實體已經存在,那麼這個代碼就沒有問題,因爲這個實體有一個完整的鍵。

如果記錄實體是新的,則必須先將其置於第一位,然後才能將其密鑰用於子實體。你會得到一個例外。

+0

如果您手動分配id/key_name,那麼您可以安全地在父代之前創建子代。 –

+0

@TimHoffman我已經更新了這個問題,並添加了我插入ID的方式。在這種情況下,我應該安全正確? – Houman

+0

是的,如果父鍵不是自動生成的,那麼您將始終擁有父鍵的完整鍵。這是防止先寫孩子的唯一方法。 –