기술블로그-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 조작이 가능하게 해주며, 실수 방지를 위해 항상 조회 → 확인 → 처리 순서를 지키는 것이 좋습니다