기술블로그-Django편

📘 Django ORM 핵심 요약 정리: 데이터 조회, 생성, 수정, 삭제 실습 가이드

Chansman 2025. 4. 30. 19:48

📘 Django ORM 핵심 요약 정리: 데이터 조회, 생성, 수정, 삭제 실습 가이드

이 글은 Django ORM을 처음 접하는 개발자들을 위해 ORM의 핵심 개념과 CRUD 기능을 실습 중심으로 정리한 튜토리얼입니다. ipython, django-extensions 등의 설정을 포함해 실무에서 바로 활용할 수 있도록 구성했습니다.


🧠 ORM이란?

  • ORM(Object Relational Mapping): 객체지향 언어로 데이터베이스를 조작할 수 있게 해주는 기술
  • objects는 Django 모델의 쿼리 매니저 역할을 합니다.

메서드 기능 SQL 대응

.all() 모든 데이터 조회 SELECT * FROM table
.get(pk=pk) 특정 pk 1건 조회 (2건 이상이면 오류) SELECT * FROM table WHERE id=pk LIMIT 1
.filter(pk=pk) 조건에 맞는 여러 건 조회 SELECT * FROM table WHERE id=pk

⚙️ ORM 셸 환경 설정

Poetry 패키지 설치

poetry add ipython
pip install ipython # wsl / 리눅스

poetry add django-extensions
pip install django-extiensions # wsl / 리눅스

셸 실행 및 종료

python manage.py shell         # 기본 셸
python manage.py shell_plus   # 자동 임포트 셸 (추천)
exit                           # 셸 종료

settings.py 설정

DJANGO_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

OWN_APPS = ['bookmark']
THIRD_PARTY_APPS = ['django_extensions']

INSTALLED_APPS = DJANGO_APPS + OWN_APPS + THIRD_PARTY_APPS

📂 객체 조회 방법 (Read)

from bookmark.models import Bookmark

Bookmark.objects.all()  # 전체 조회
Bookmark.objects.get(id=2)  # id=2인 객체 1개 조회
Bookmark.objects.filter(id__gte=2)  # id가 2 이상인 객체
Bookmark.objects.filter(name='네이버')  # name이 정확히 '네이버'인 객체

bookmark_list = Bookmark.objects.all()
bookmark_list[0]  # 첫 번째 객체
Bookmark.objects.first()  # 첫 객체
Bookmark.objects.last()   # 마지막 객체
bookmark_list[0].id  # 객체의 id 확인

🔍 문자열 조건 검색 (LIKE)

📌 짧은 검색어는 DB 부하를 줄 수 있으니 주의!

Bookmark.objects.filter(name__icontains='네')  # 포함
Bookmark.objects.filter(name__startswith='다')  # 시작
Bookmark.objects.filter(name__endswith='글')    # 끝
Bookmark.objects.filter(name__in=['구글','네이버'])  # 목록
Bookmark.objects.filter(name='네이버', url__startswith="https://naver")  # AND 조건

➕ 객체 생성 (Create)

Bookmark.objects.create(name='야후', url='https://yahoo.com')

bookmark = Bookmark(name='야후2', url='https://yahoo.com')
bookmark.save()

🔁 객체 복제 (id 변경 후 새 저장)

Bookmark.objects.all()
b = _.first()  # 마지막 출력값 가져오기
b.id = None
b.save()
print(b.id)  # 새로운 id 생성됨
b.name = '네이버2'
Bookmark.objects.all()  # 새 객체가 반영됨

🛠️ 객체 수정 (Update)

Bookmark.objects.filter(url__icontains='naver.com').update(name='네이버')
  • 조건에 맞는 모든 객체의 name 변경
  • 결과는 변경된 객체의 수로 반환됨

❌ 객체 삭제 (Delete)

단일 객체 삭제

b.delete()
print(b.id)  # None (삭제됨)

다중 객체 삭제

Bookmark.objects.filter(name__icontains='야후').delete()
  • .filter()로 먼저 대상 조회 → delete() 호출 순서로 안전하게 처리!

✅ 마무리 요약

기능 메서드 요약

조회 .all(), .get(), .filter() 기본 CRUD 조회
검색 icontains, startswith, in 문자열 조건 검색
생성 .create(), .save() 객체 삽입
수정 .update() 조건에 맞는 값 변경
삭제 .delete() 단건 또는 다건 삭제

💡 Django ORM은 SQL을 몰라도 직관적으로 DB 조작이 가능하게 해주며, 실수 방지를 위해 항상 조회 → 확인 → 처리 순서를 지키는 것이 좋습니다