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
반응형
'Python > Django' 카테고리의 다른 글
Django ManyToMany로 생기는 중간테이블(intermediate table)에 접근하기 # through # 중간테이블 정의 없이 (0) | 2023.03.30 |
---|---|
Django 최신 데이터 가져오기# DateTimeField # latest # earliest (0) | 2023.03.26 |
Django 도메인 설정 후에 CSRF 설정 (0) | 2023.03.22 |
Nginx Django static file 경로 설정하기 (0) | 2023.03.13 |
Django Deployment with Nginx and Gunicorn (0) | 2023.03.12 |