한번에 여러개의 객체를 생성해야 하거나 업데이트해야 할 경우가 작업을 하다 보면 생기게 됩니다.
이때 생성/수정 때마다 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 |
댓글