📌 Django bulk_create() 완전 정리 - 대량 객체 저장할 때 쓰는 방법
✅ 1. bulk_create()란?
Django의 ORM에서 여러 객체를 한 번의 SQL 쿼리로 대량 저장할 수 있게 해주는 메서드입니다.
Blog.objects.bulk_create(new_blog_list)
➡ 반복적인 .save() 호출 없이, 성능을 높이고 효율적인 DB 작업이 가능합니다.
🧩 2. 일반 저장과의 비교
방식 코드 SQL 발생 횟수
반복 저장 | for blog in blogs: blog.save() | ❌ N번 (느림) |
bulk 저장 | Blog.objects.bulk_create(blogs) | ✅ 1번 (빠름) |
🔄 3. 예시 코드 흐름
import copy
new_blog_list = []
for i in range(10):
for blog in blog_list:
clone = copy.deepcopy(blog)
clone.id = None # 새 객체로 인식되게 함
new_blog_list.append(clone)
# 대량 저장
Blog.objects.bulk_create(new_blog_list)
- id = None → 기존 객체를 새 객체로 바꾸는 핵심
- deepcopy() → 같은 객체 참조가 아닌 완전 복사
⚠️ 4. 주의사항
항목 설명
save() 호출 안 됨 | save() 오버라이드, validation 로직 무시됨 |
시그널 미작동 | pre_save, post_save 등 시그널 동작 안 함 |
반환값 없음 | bulk_create()는 저장된 객체 리스트를 반환하지 않음 (기본) |
필요 시: return Blog.objects.bulk_create(..., batch_size=100) 처럼 batch_size 조절 가능
✅ 5. 언제 사용하나?
- 테스트 데이터 대량 생성
- 엑셀/CSV 데이터 일괄 업로드
- 객체 수백 개 이상 삽입 시
🧠 요약 정리
항목 내용
기능 | 여러 객체를 한 번에 DB에 저장 (INSERT) |
성능 | .save() 반복보다 훨씬 빠름 |
조건 | 각 객체의 id = None 이어야 새로 저장됨 |
사용 예 | Model.objects.bulk_create(list) |
Django에서 대량 데이터를 다룰 땐 bulk_create()는 필수 도구입니다.
성능을 높이고 코드도 깔끔하게 만들어주는 효율적인 방법이니 꼭 익혀두세요! 😉
'기술블로그-Django편' 카테고리의 다른 글
📘 Django Paginator: get_page(함수) vs get.page(속성) 차이 완벽 정리 (0) | 2025.05.07 |
---|---|
📘 Django 페이지네이션 완전 정리: Paginator와 page_object의 모든 것 (0) | 2025.05.07 |
📌 Django render()와 context 완전 정리 + 템플릿 활용 예시 (0) | 2025.05.07 |
📌 Django ModelForm의 instance= 사용법 완전 정리 (0) | 2025.05.07 |
📌 Django {% url %} 태그 완전 가이드 - URL 생성의 모든 것 (0) | 2025.05.07 |