Django ORM은 「DB 테이블을 파이썬 클래스로 표현」하는 도구입니다.
SQL을 직접 쓰지 않고 모델 메서드로 CRUD합니다.
마이그레이션도 자동 — 모델 변경 → 명령 한 번이면 DB 스키마 동기화.
모델 정의.
class Post(models.Model): title = models.CharField(max_length=200); content = models.TextField(); created_at = models.DateTimeField(auto_now_add=True); author = models.ForeignKey(User, on_delete=models.CASCADE).
클래스가 곧 테이블, 필드가 컬럼.
마이그레이션.
python manage.py makemigrations — 모델 변경 감지 → 마이그레이션 파일 생성.
python manage.py migrate — 실제 DB에 적용.
모델·DB 동기화가 자동, 변경 이력도 파일로 남음.
쿼리.
Post.objects.all() — 전체.
Post.objects.filter(author=user) — 조건.
Post.objects.get(id=1) — 단건(없으면 예외).
Post.objects.create(title="...", content="...") — 생성.
post.save()·post.delete()로 수정·삭제.
고급 — select_related·prefetch_related로 N+1 쿼리 문제 해결, annotate로 집계, F·Q 객체로 복잡한 조건.
익숙해지면 SQL을 거의 안 쓰게 됩니다.
다만 매우 복잡한 쿼리는 raw SQL이나 .extra()를 써야 할 때도 있습니다.
한 줄 요약
Django ORM은 모델 클래스로 DB 테이블을 표현, makemigrations/migrate로 스키마 동기화, objects.filter·get·create로 쿼리합니다.
select_related로 N+1 해결.
더 알아볼 것
- N+1 쿼리 문제와 해결
- F·Q 객체 — 복잡한 쿼리
- django-debug-toolbar로 쿼리 분석