2013-08-22 81 views
15

我想了解bulk_create在DjangoDjango的bulk_create功能例如

這是我想將我原來的查詢:

for e in q: 
    msg = Message.objects.create(
     recipient_number=e.mobile, 
     content=batch.content, 
     sender=e.contact_owner, 
     billee=batch.user, 
     sender_name=batch.sender_name 
    ) 

這是否意味着執行以下操作(如下圖)將環並首先創建所有條目,然後點擊數據庫?這是正確的嗎?

msg = Message.objects.bulk_create({ 
    Message (
     recipient_number=e.mobile, 
     content=batch.content, 
     sender=e.contact_owner, 
     billee=batch.user, 
     sender_name=batch.sender_name 
    ), 
}) 
+2

你快到了。不要在循環中創建對象。只需執行'Message(...)'而不是'Message.objects.create(...)' - 它不會觸發數據庫調用。把它放到一個列表中,並將該列表傳遞給'bulk_create' – karthikr

回答

29

問題中的第二個代碼創建單個對象,因爲它使用Message對象傳遞一個集合。

要創建多個對象,請將多個消息對象傳遞給bulk_create。例如:

objs = [ 
    Message(
     recipient_number=e.mobile, 
     content=batch.content, 
     sender=e.contact_owner, 
     billee=batch.user, 
     sender_name=batch.sender_name 
    ) 
    for e in q 
] 
msg = Message.objects.bulk_create(objs) 
+0

如果我有一百萬個對象會怎麼樣?這很重要嗎? – GrantU

+0

如果您具有處理1MM對象的處理能力,那麼確定 – karthikr

+0

It it CPU or Memory out of interest? – GrantU