🛠️ 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 |