📌 Django ORM 완전정복: 개념부터 예시, 흐름까지 한 번에 정리!

2025. 5. 8. 22:13·기술블로그-Django편

📌 Django ORM 완전정복: 개념부터 예시, 흐름까지 한 번에 정리!


🧠 ORM이란 무엇인가요?

**ORM (Object Relational Mapping)**은 객체지향 언어(Python)의 클래스와 관계형 데이터베이스의 테이블을 자동으로 연결해주는 기술입니다.

📌 핵심 개념 매핑표

Python 개념 DB 개념

클래스 (class) 테이블 (table)
인스턴스 (object) 행 (row)
속성 (attribute) 열 (column)

💬 즉, SQL 쿼리를 직접 작성하지 않아도 Python 코드만으로 데이터를 조작할 수 있습니다!


🧱 예시: Django 모델로 ORM 구현하기

from django.db import models

class Todo(models.Model):
    title = models.CharField(max_length=100)
    is_completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

이렇게 작성하면 Django는 다음과 같은 SQL 테이블을 자동으로 생성합니다:

id title is_completed created_at

1 공부하기 False 2025-05-08 10:00AM

🔄 ORM 작동 흐름 요약

1. 모델 정의 (models.py)
      ↓
2. python manage.py makemigrations
   - 모델 변경사항을 감지해 "설계도" 생성
      ↓
3. python manage.py migrate
   - 설계도를 실제 데이터베이스에 반영

📁 예시 마이그레이션 파일 이름:

  • 0001_initial.py
  • 0002_add_field_title.py

🧠 마이그레이션은 Git처럼 이전 변경사항을 기반으로 누적 기록되며, 충돌 없이 정교하게 반영됩니다.


🛠️ ORM을 사용한 데이터 조작 예시

# 객체 생성
Todo.objects.create(title="장보기")

# 전체 조회
Todo.objects.all()

# 조건 검색
Todo.objects.filter(is_completed=False)

# 객체 수정
todo = Todo.objects.get(id=1)
todo.is_completed = True
todo.save()

# 삭제
todo.delete()

⚠️ ORM 사용 시 주의사항

실수 예시 바른 사용법

DB를 직접 수정하고 마이그레이션 X 모델 → makemigrations → migrate 순서 지키기
기존 필드명을 무작정 변경 변경 전 마이그레이션 백업 추천
중복된 마이그레이션 파일 여러 개 생성 squashmigrations로 정리 가능

✅ 마무리 요약

항목 설명

ORM 정의 객체(Python 클래스) ↔ 관계형 DB 테이블 매핑 기술
장점 SQL 없이도 DB 제어 가능, 코드 중심 설계 가능
핵심 명령어 makemigrations (설계도 생성), migrate (DB 반영)
실무 적용 팁 Git처럼 마이그레이션 이력 누적 / 충돌 방지 필수

💡 다음 학습 추천:

  • ForeignKey, OneToMany, ManyToMany 관계 표현법
  • ORM 최적화 쿼리 (select_related, prefetch_related)
  • Admin 페이지에서 ORM 연결 확인 방법

필요하시면 CRUD 흐름 중심 예제도 추가해드릴게요! 🙂

'기술블로그-Django편' 카테고리의 다른 글

🔵 Bootstrap 페이지네이션 UI에서 현재 페이지 강조하기  (0) 2025.05.09
⚡ Emmet 완전 정복: PyCharm에서 HTML/CSS 자동완성 설정하기  (0) 2025.05.09
📌 Django DeleteView의 확인 화면 제거 vs JS confirm() 비교 가이드  (0) 2025.05.08
📌 CI/CD란 무엇인가요?  (0) 2025.05.08
📌 Django에서 누락된 category 필드 일괄 업데이트하기 (default 적용)  (0) 2025.05.08
'기술블로그-Django편' 카테고리의 다른 글
  • 🔵 Bootstrap 페이지네이션 UI에서 현재 페이지 강조하기
  • ⚡ Emmet 완전 정복: PyCharm에서 HTML/CSS 자동완성 설정하기
  • 📌 Django DeleteView의 확인 화면 제거 vs JS confirm() 비교 가이드
  • 📌 CI/CD란 무엇인가요?
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django ORM 완전정복: 개념부터 예시, 흐름까지 한 번에 정리!
상단으로

티스토리툴바