본문 바로가기

Python/Django

Django: bulk create

728x90
반응형

Djnago  ORM query 중 bulk_create를 통해서

list에 class instance들을 담아서 한번에 생성할 수 있다.

한번의 쿼리로 여러 row를 생성 할수 있어서 DB에 overhead를 발생시키지 않는다.

 

주의할 점은, 데이터 무결성은 보장이 안되니 bulk_create 를 하려면 데이터 전처리나 검증을 확실히 해야 한다.

 

-------------

사용 예제

 

models.py

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    publication_date = models.DateField()

 

views.py

from myapp.models import Author, Book

# Creating multiple Author instances
authors_list = [
    Author(name='George Orwell'),
    Author(name='J.K. Rowling'),
    Author(name='Ernest Hemingway'),
]

# Bulk create authors
created_authors = Author.objects.bulk_create(authors_list)

# Creating multiple Book instances
books_list = [
    Book(title='1984', author=created_authors[0], publication_date='1949-06-08'),
    Book(title='Animal Farm', author=created_authors[0], publication_date='1945-08-17'),
    Book(title="Harry Potter and the Philosopher's Stone", author=created_authors[1], publication_date='1997-06-26'),
    Book(title='The Old Man and the Sea', author=created_authors[2], publication_date='1952-09-01'),
]

# Bulk create books
Book.objects.bulk_create(books_list)


아래와 같은 식으로 리스트 컴프리헨션 활용

 

 

* bulk_update도 있음(추후 포스팅)

728x90
반응형