Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- CleanCode
- 자료구조
- Djnago CSRF
- 알고리즘
- request.path
- django
- is_ajax() not working
- 포맷팅
- nginx
- 클린 코드
- 정렬
- 복수 외래키
- 클린코드
- reCAPTCHA V2
- 클린코드-함수
- django 시작하기
- 트리란
- 효울적
- 선택 정렬
- queryset
- Trre heap
- Django Ajax
- 버블 정렬
- render html
- queryset filter
- 글자 수
- check ajax
- request.GET
- Proxy_pass
- HTTP
Archives
- Today
- Total
Yang 코딩 공부
Django 한번에 대량 업데이트 본문
- Django의 bulk_update() 메서드
- bulk_update()메서드의 단점
model.objects.bulk_update(obj, fields, batch_size)
- objs - 수행 할 작업 목록
- fields - 쿼리를 수행 할 필드 목록
- batch_size - 단일 데이터베이스 쿼리에 저장할 개체 수, 선택적 인수
ex)
이름과 나이를 저장하는 Person 모델이 있다고 해보자
from django. db import models
class Person(models.Model):
username = models.CharField(max_length = 100, unigue = True)
...
age = models.IntrgerField(default = 0)
그뒤 해당 Person모델로 저장된 모든 사람의 나이를 1만큼 씩 증가시킨다고 하면
people = Person.objects.all()
for person in people:
person.age += 1
person.save()
위 코드와 같이 수행했을 것이다.
하지만 해당 코는 쿼리셋 개체의 수만큼 쿼리가 발생하기 때문에 비효율적이다.
people = Person.objects.all()
for person in people:
person.age += 1
Person.objects.bulk_update(people, fields = ['age'])
해당 코드처럼 bulk_update를 사용하게 되면 단일 쿼리로 한번에 업데이트 할 수 있다.
bulk_update()메소드의 단점
- bulk_update()메스드를 사용할 경우 기본키(primary key) 값은 변경할 수 없다.
- 모든 모델에는 save()메서드가 존재하는데, 이 메서드는 bulk_update() 메서드를 사용할 때는 호출되지 않습니다. 즉슨 모델에서 save()메서드를 오버라이딩 하더라도 적욛되지 않습니다.
- 많은 레코드에 대해 열을 업데이트하는 경우 배치 크기(batch_size) 값을 작성해줘야 합니다. 그렇지 않으면 생성된 SQL 쿼리가 매우 길어진다고 합니다.
'Django > tip' 카테고리의 다른 글
Django [tip] - 중복 되지않는 여러 외래키 묶음 생성하기 (0) | 2022.09.06 |
---|---|
[Django] Mixin (0) | 2022.09.06 |
Django [tip] ajax통신하여 html 파일을 랜더링하기. (0) | 2022.06.17 |
Django [tip] Django에서 ajax 인지 확인하기. (0) | 2022.06.17 |
Django [Tip] - request.GET[key] / request.GET.get(key) 차이점 (0) | 2022.03.31 |