2013-08-22 4 views
15

私はこれは私が変換しようとしている私の元のクエリたジャンゴジャンゴbulk_create関数の例

で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 
    ) 

は、その平均値(下)次の操作を行っていますループ最初にすべてのエントリを作成し、データベースにヒットしますか?これは正しいですか?

+2

あなたはほぼあります。ループ内にオブジェクトを作成しないでください。 'Message.objects.create(...)'の代わりに 'Message(...)'を実行するだけです。データベース呼び出しを引き起こさないでしょう。それをリストに入れて、そのリストを 'bulk_create'に渡します。 – karthikr

答えて

29

質問の2番目のコードは、Messageオブジェクトを含むセットを渡すため、1つのオブジェクトを作成します。

複数のオブジェクトを作成するには、複数の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

それはCPUまたはメモリの対象外ですか? – GrantU