🛠️ Django ORM 완벽 가이드

2025. 5. 14. 15:20·기술블로그-Django편

🛠️ Django ORM 완벽 가이드

1️⃣ ORM이란?

**ORM (Object-Relational Mapping)**은 객체(Object)와 관계형 데이터베이스(Relational DB) 사이를 매핑(Mapping)해주는 기술입니다.

🔁 SQL 문을 직접 작성하지 않고도 객체 지향적으로 데이터베이스를 다룰 수 있게 해줍니다.

📦 장점

  • ✅ 생산성 향상 (코드만으로 DB 조작 가능)
  • ✅ 유지보수 용이 (Python 코드로 일관된 로직 구성)
  • ✅ 보안 향상 (SQL 인젝션 위험 최소화)

2️⃣ Django ORM의 특징

  • Django에서 기본으로 제공하는 ORM 시스템
  • 모델 클래스 정의만으로 데이터베이스 구조 설계 가능
  • models.Model을 상속하여 클래스 정의 → 자동 테이블 생성
  • SQL 없이도 QuerySet으로 데이터 필터링/정렬/수정 가능

3️⃣ Django ORM 기본 사용법

모든 ORM 작업은 모델 클래스에 연결된 Manager 객체 (objects)를 통해 수행됩니다.

🔍 objects

Post.objects.all()
  • 모델의 전체 데이터를 가져옵니다.

🔎 filter

Post.objects.filter(title__icontains="django")
  • 조건에 맞는 다수의 객체를 리스트 형태로 반환합니다.
  • 조건 연산자: exact, icontains, gte, lte, in, 등

🎯 get

Post.objects.get(id=1)
  • 단일 객체만 반환 (조건에 맞는 것이 없거나, 여러 개면 에러)

📛 주의: 다수 결과 or 없음 → 예외 발생


📋 order_by

Post.objects.order_by('-created_at')
  • 정렬 기준 설정 (문자열 앞에 - 붙이면 내림차순)

🆕 create

Post.objects.create(title="새글", content="내용", user=request.user)
  • 새 객체를 만들고 저장까지 완료

❌ delete

post = Post.objects.get(id=1)
post.delete()
  • 해당 객체를 삭제합니다.

🔁 update

post = Post.objects.get(id=1)
post.title = "수정된 제목"
post.save()
  • 필드 값을 수정한 후 .save() 호출로 DB 반영

또는 다수 객체 업데이트:

Post.objects.filter(user=user).update(category='news')

🚫 get_object_or_404

from django.shortcuts import get_object_or_404

post = get_object_or_404(Post, pk=5)
  • 객체를 가져오되, 없으면 404 예외 발생 → 주로 뷰 함수에서 사용

✅ 요약표

메서드 설명

objects.all() 전체 데이터 조회
filter() 조건에 맞는 여러 개 조회
get() 조건에 맞는 하나 조회 (없으면 예외)
order_by() 정렬 기준 설정
create() 객체 생성 및 저장
delete() 객체 삭제
update() 필드 값 수정 후 저장
get_object_or_404() 없으면 404 반환하는 안전한 get

👉 실무에서는 filter와 get_object_or_404를 많이 조합해 사용합니다.

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

🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리  (0) 2025.05.14
👤 Django 사용자 인증 시스템 완전 정리  (0) 2025.05.14
📝 Django Form 기본 정리  (0) 2025.05.14
🔗 Django URL 설정 완벽 가이드  (0) 2025.05.14
⚙️ Django Function-Based View (FBV) 완전 이해하기  (0) 2025.05.14
'기술블로그-Django편' 카테고리의 다른 글
  • 🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리
  • 👤 Django 사용자 인증 시스템 완전 정리
  • 📝 Django Form 기본 정리
  • 🔗 Django URL 설정 완벽 가이드
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (777) N
      • Python (32)
      • 프로젝트 (101) 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🛠️ Django ORM 완벽 가이드
상단으로

티스토리툴바