티스토리 뷰

728x90
반응형

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 개발자로서 꼭 익혀야 할 중요한 역량입니다.

 

728x90
반응형