Djangoのオンラインドキュメントでこのトピックについて何も見たことがありません。Djangoのバッチ保存オブジェクトについての質問
私はデータベースにオブジェクトのリストを保存しようとしていますが、私ができることはリストをループしてすべてのオブジェクトに対してsave()を呼び出すことです。
Djangoは数回データベースにヒットしますか?または、Djangoは代わりに1つのバッチを保存しますか?
Djangoのオンラインドキュメントでこのトピックについて何も見たことがありません。Djangoのバッチ保存オブジェクトについての質問
私はデータベースにオブジェクトのリストを保存しようとしていますが、私ができることはリストをループしてすべてのオブジェクトに対してsave()を呼び出すことです。
Djangoは数回データベースにヒットしますか?または、Djangoは代わりに1つのバッチを保存しますか?
残念ながら、バッチインサートは、Django 1.3以前が直接サポートしていないものです。 ORMを使用する場合は、個々のオブジェクトごとにsave()を呼び出す必要があります。大きなリストでパフォーマンスが問題になっている場合は、django.db.cursorを使用してトランザクション内でアイテムを手動でINSERTして、プロセスを大幅に高速化できます。巨大なデータセットをお持ちの場合は、PostgresのCOPY FROMなどのデータベースエンジン固有のメソッドを調べる必要があります。
はdjango 1.5でこれでも当てはまりますか? – maazza
いいえ - 下記の答えを参照してください。 1.4以降、bulk_create()は効率的なバルクデータの挿入を処理します。 (https://docs.djangoproject.com/en/1.5/ref/models/querysets/#bulk-create) –
コピー元はbulk_createよりはるかに優れていますか? – sharafjaffri
Thisが良い出発点かもしれませんが、コードスニペットの作成者によれば、プロダクションが準備できていない可能性があります。
この質問は、How do I perform a batch insert in Django?にも記載されています。これは、Djangoでこれを行う方法をいくつか示しています。
Django 1.4以降、クエリーセットオブジェクトにはbulk_create()
メソッドが存在します。これにより、単一のクエリーにオブジェクトのリストを挿入することができます。詳細情報については、以下を参照してください。Djangoの1.4から
非常に良い! 1.4にアップグレードする必要があります。 – netvope
bulk_createは素晴らしいですが、残念ながら継承されたモデルをサポートしていません。それを扱う考えはありますか? –
特に、[モデルの主キーがAutoFieldの場合、save()のようにプライマリキー属性を取得および設定しない場合、データベースバックエンドがサポートしていない限り(現在はPostgreSQL)](https:// docs。 djangoproject.com/ja/dev/ref/models/querysets/#bulk-create)」を参照してください。 – Ninjakannon
は常にしかし、bulk_create()
が存在するが、。
bulk_create()
を使用すると、内部的にインスタンスsave()
メソッドを呼び出さないように注意する必要があります。
ジャンゴドキュメントは、あなたが使用することはできません(私の場合のように)、saveメソッドをオーバーライドしている場合
モデルのsave()メソッドは、だから、
と呼ばれることはありません言うようにbulk_create。
おそらく、bulk_create()がdjango 1.4以降で利用できるようになりました。 – DMTintner