2013-08-22 44 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