본문 바로가기
python/Django

Django bulk_create/bulk_update

by Redking

한번에 여러개의 객체를 생성해야 하거나 업데이트해야 할 경우가 작업을 하다 보면 생기게 됩니다.

 

이때 생성/수정 때마다 save() 메서드를 사용하게 되면 DB에 쿼리가 save() 메서드를 사용한 횟수 만큼 쿼리가 발생하여 DB에 부담이 됩니다.

Django에는 이와 같은 문제를 해결하기 위해 bulk_create, bulk_update 기능이 있습니다. 이를 사용하게 되면 한번에 여러개의 객체를 저장할 수 있어 쿼리가 단 1번만 발생합니다.

사용할 때 주의할 점으로는 기본 메서드 들을 오버라이드 하여 사용하는 경우에 동작이 재대로 되지 않는다는 점입니다. 이 점을 유의하여 사용하셔야 합니다.

 

예제)

class Sample(models.Model):
    name = models.CharField('이름', max_length=12)
    number = models.integerField('번호')
    
    def save(self, *args, **kwargs):
    	...
        

bulk_sample_list = []
for i, sample in enumerate(Sample.objects.all()):
    sample.number = i

# 수정된 field인 number를 명시, bulk_update시에 오버라이드된 save 메서드는 동작 x
Sample.objects.bulk_update(bulk_sample_list, ['number'])

'python > Django' 카테고리의 다른 글

Django 5.0 버전 출시 전 살펴보기  (1) 2023.11.23
Django JSONField (Postgresql)  (0) 2022.12.06
Django sitemap 분할 관리하기  (0) 2022.10.13
Django annotate management  (0) 2022.10.12
Django Database Functions - Text functions  (0) 2022.10.11

댓글