티스토리 뷰
Django는 데이터베이스를 다룰 때 ORM(Object Relational Mapping)을 사용해 SQL 없이도 손쉽게 데이터를 조작할 수 있습니다. 그 중심에 있는 것이 바로 objects 매니저입니다. objects는 Django 모델에서 기본적으로 제공되는 매니저로, 데이터의 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)을 비롯해 다양한 쿼리 기능을 제공합니다.
이 글에서는 objects 매니저의 주요 메서드들과 그 사용 예제들을 통해 Django ORM의 실전 활용법을 소개합니다.
1. objects 매니저란?
Django 모델 클래스에서 Model.objects는 기본 매니저입니다. 이 매니저를 통해 해당 모델의 데이터를 조회하거나 조작할 수 있습니다. 예를 들어, 모든 데이터를 가져오려면 다음과 같이 작성합니다:
Book.objects.all()
objects 매니저는 아래와 같은 다양한 ORM 메서드를 제공합니다.
2. 주요 메서드와 예제
2.1 all()
모든 데이터를 조회합니다.
books = Book.objects.all()
2.2 filter(**kwargs)
조건에 맞는 데이터를 조회합니다.
books = Book.objects.filter(author="홍길동")
2.3 exclude(**kwargs)
조건에 맞지 않는 데이터를 조회합니다.
books = Book.objects.exclude(genre="Science")
2.4 get(**kwargs)
조건에 맞는 하나의 객체를 조회합니다. 하나만 있어야 하며, 없거나 여러 개면 예외 발생.
book = Book.objects.get(id=1)
2.5 create(**kwargs)
객체를 생성하고 저장까지 한 번에 처리합니다.
book = Book.objects.create(title="신간", author="김철수")
2.6 get_or_create()
존재하지 않으면 새로 만들고, 있으면 가져옵니다.
book, created = Book.objects.get_or_create(title="특별한 책")
2.7 update_or_create()
있으면 업데이트, 없으면 생성합니다.
book, created = Book.objects.update_or_create(
title="업데이트 도서",
defaults={'author': "박민수"}
)
2.8 bulk_create()
여러 개의 객체를 한 번에 생성합니다 (성능 최적화용).
Book.objects.bulk_create([
Book(title="책1"),
Book(title="책2"),
])
2.9 order_by()
정렬된 결과를 조회합니다.
Book.objects.order_by('-published_date')
2.10 distinct()
중복 제거된 결과를 조회합니다.
Book.objects.values('genre').distinct()
2.11 exists()
쿼리 결과가 존재하는지 여부를 확인합니다.
if Book.objects.filter(title="존재 확인").exists():
print("존재합니다")
2.12 aggregate() / annotate()
집계 함수 또는 주석 처리로 집계된 데이터를 제공합니다.
from django.db.models import Count
Book.objects.aggregate(count=Count('id'))
Book.objects.values('author').annotate(count=Count('id'))
3. 마치며
objects 매니저는 Django ORM의 핵심이자 매우 유용한 도구입니다. SQL을 직접 작성하지 않고도 직관적인 코드로 복잡한 쿼리와 데이터 조작을 수행할 수 있으며, 개발자의 생산성과 코드의 가독성을 모두 높여줍니다.
이 글에서 소개한 다양한 메서드들을 실제 프로젝트에 적절히 활용하면, 유지보수가 쉬운 깔끔한 코드를 작성할 수 있습니다. objects 매니저를 잘 이해하고 활용하는 것은 Django 개발자로서 꼭 익혀야 할 중요한 역량입니다.
'Python > Django Framework (DRF)' 카테고리의 다른 글
| Django에서 as_view()와 dispatch 이해하기 (0) | 2025.03.10 |
|---|---|
| Django의 믹스인(Mixin) 클래스 (0) | 2025.03.09 |
| Django의 as_view()는 왜 필요한가? (0) | 2025.03.09 |
| Django의 Generic View 를 확실하게 정리하기! (0) | 2025.03.09 |
| [Django] Python 매직 메서드(Magic Methods) 완벽정리 (0) | 2025.03.09 |
- Total
- Today
- Yesterday
- 로또 ai
- 클래스형 뷰
- 자동매매
- Python
- chat gpt 한국어 가격
- chat gpt 모델 별 가격
- 로또 1164회 당첨
- 재테크
- 장고 orm sql문 비교
- 인공지능 로또 예측
- 1165회 로또
- 기술적분석
- 골든크로스
- 주식투자
- chat gpt 모델 api 가격 예측
- 티스토리챌린지
- chat gpt api 비용 계산
- 토치비전
- 자동매매로직
- 차트분석
- 주식공부
- 1164회 로또
- Numpy
- chat gpt 모델별 예산
- chat gpt 가격 예상
- 퀀트투자
- 오블완
- chat gpt 4o 예산
- 케라스
- 주린이탈출
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |