Django: могу ли я добавить список новых экземпляров модели в базу данных с помощью одного вызова метода? - PullRequest
1 голос
/ 20 сентября 2011

Если я создаю список новых объектов модели на основе какого-либо ввода формы, например,

new_items = []
for name, value in self.cleaned_data.items():
  if name.startswith('content_item_'):
      new_items.append(ContentItem(item=value))

# can I add the entire new_items list to the database in one swoop? 

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create

Редактировать: К сожалению, это не относится к 1.3

Оригинальный ответ

Слава богу за bulk_create!

Затем вы можете сделать что-то вроде этого:

ContentItem.objects.bulk_create(new_items)

Для тех, кто слишком ленив, чтобы щелкнуть ссылку, вот пример из документов:

>>> Entry.objects.bulk_create([
...     Entry(headline="Django 1.0 Released"),
...     Entry(headline="Django 1.1 Announced"),
...     Entry(headline="Breaking: Django is awesome")
... ])
1 голос
/ 20 сентября 2011

Я считаю, что ответ Брэндона Конкла на аналогичный вопрос все еще действителен: Вопрос о пакетном сохранении объектов в Django

В заключение: К сожалению, нет, вам придется использовать django.db.cursor с ручным запросом для этого.Если набор данных невелик или производительность не так важна, циклический переход не так уж и плох, и это самое простое решение.

Также посмотрите этот тикет: https://code.djangoproject.com/ticket/661

...