Подтвердить что ты не робот

Вопрос о пакетах сохранения объектов в Django

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

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

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

4b9b3361

Ответ 1

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

Ответ 4

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

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

Как сообщает django docs,

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

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