31

Django で 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
    ),
})
4

3 に答える 3

53

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

複数のオブジェクトを作成するには、複数の 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)
于 2013-08-22T14:39:20.840 に答える