Вопрос о пакетном сохранении объектов в Джанго - PullRequest
30 голосов
/ 18 ноября 2010

Я не видел ничего по этой теме в онлайн-документах Django.

Я пытаюсь сохранить список объектов в базе данных, но я могу сделать цикл по списку и вызвать save () для каждого объекта.

Так Django попал в базу данных несколько раз? Или вместо этого Django сделает одно пакетное сохранение?

Ответы [ 5 ]

35 голосов
/ 14 февраля 2012

Начиная с Django 1.4, в объекте QuerySet существует метод bulk_create(), который позволяет вставлять список объектов в один запрос. Для получения дополнительной информации см .:

10 голосов
/ 18 ноября 2010

К сожалению, пакетные вставки - это то, что Django 1.3 и более ранние версии не поддерживают напрямую.Если вы хотите использовать ORM, вам нужно вызвать save () для каждого отдельного объекта.Если это большой список и производительность является проблемой, вы можете использовать django.db.cursor, чтобы ВСТАВИТЬ элементы вручную внутри транзакции, чтобы значительно ускорить процесс.Если у вас огромный набор данных, вам нужно начать искать методы, специфичные для ядра СУБД, например, COPY FROM в Postgres.

3 голосов
/ 21 октября 2015

Из Django 1.4 существует bulk_create(), но всегда но.

Вы должны быть осторожны, используя bulk_create(), он не вызовет метод экземпляра save() для внутреннего использования.

Как говорит django docs

Метод save () модели не будет вызываться

Итак, если вы переопределяете метод сохранения, (как мойдело было) вы не можете использовать bulk_create.

2 голосов
/ 18 октября 2011

Этот вопрос также рассматривается в Как выполнить пакетную вставку в Django? , которая предоставляет несколько способов заставить Django сделать это.

1 голос
/ 26 августа 2011

Эта может быть хорошей отправной точкой, но, как говорит автор фрагмента кода, она может быть не готова к работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...