📌 Django bulk_create() 완전 정리 - 대량 객체 저장할 때 쓰는 방법

2025. 5. 7. 15:44·기술블로그-Django편

📌 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
'기술블로그-Django편' 카테고리의 다른 글
  • 📘 Django Paginator: get_page(함수) vs get.page(속성) 차이 완벽 정리
  • 📘 Django 페이지네이션 완전 정리: Paginator와 page_object의 모든 것
  • 📌 Django render()와 context 완전 정리 + 템플릿 활용 예시
  • 📌 Django ModelForm의 instance= 사용법 완전 정리
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787) N
      • Python (32)
      • 프로젝트 (110) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    life reflection
    gpterror
    btscomeback
    chatgpterror
    basalcellcarcinoma
    bts
    newpoliticalparty
    lawsuitculture
    btsjungkook
    btsreunion
    global politics
    urbantrends
    livebroadcast
    classaction
    americanlaw
    youngprofessionals
    travel ban
    college reunions
    chinanightlife
    btsdischarge
    trumpmuskclash
    self-growth
    homebartrend
    RM
    뷔
    titaniumcase
    hotcoffeecase
    americaparty
    remittance
    smartphonedurability
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django bulk_create() 완전 정리 - 대량 객체 저장할 때 쓰는 방법
상단으로

티스토리툴바