Django DB Query 설명과 예시
2023. 12. 30. 13:10ㆍ개발/Django
728x90
반응형
django DB Query
QuerySet
from myapp.models import MyModel
queryset = MyModel.objects.all()
- MyModel 모델에서 모든 레코드를 가져와서 QuerySet을 생성
- 필터링:
- filter() 메서드를 사용하여 특정 조건을 만족하는 레코드를 검색할 수 있습니다.
Model.objects.filter(조건)
filtered_queryset = MyModel.objects.filter(field_name=value)
- MyModel 모델에서 name 필드가 "John"인 레코드를 검색하려면 다음과 같이 사용할 수 있습니다
filtered_queryset = MyModel.objects.filter(name="John")
- 정렬
- order_by() 메서드를 사용하여 결과를 특정 필드를 기준으로 정렬할 수 있습니다.
sorted_queryset = MyModel.objects.order_by('field_name')
- MyModel 모델에서 age 필드를 기준으로 정렬하려면 다음과 같이 사용할 수 있습니다
sorted_queryset = MyModel.objects.order_by('age')
- 값 추출
- values() 메서드를 사용하여 특정 필드의 값만 가져올 수 있습니다.
values_queryset = MyModel.objects.values('field_name')
- MyModel 모델에서 name 필드의 값을 가져오려면 다음과 같이 사용할 수 있습니다:
values_queryset = MyModel.objects.values('name')
- 조인:
- select_related() 및 prefetch_related() 메서드를 사용하여 관련된 모델을 미리 로드할 수 있습니다. 이를 통해 N+1 쿼리 문제를 해결할 수 있습니다.
queryset = MyModel.objects.select_related('related_model')
- MyModel과 related_model 간의 관계를 가진 모델을 검색하고 관련된 모델을 미리 로드합니다.
from myapp.models import Book
# 책을 검색하고 해당 책의 저자 정보를 미리 로드
books = Book.objects.select_related('author')
# 이제 books QuerySet에는 책과 관련된 저자 정보가 미리 로드되어 있음
for book in books:
print(f"책 제목: {book.title}")
print(f"저자: {book.author.name}")
- values_list
- 데이터베이스에서 검색한 결과를 튜플의 리스트로 반환하는 메서드입니다.
QuerySet.values_list(*fields, flat=False)
- fields (필수): 반환할 필드 이름을 나타내는 위치 인자입니다. 여러 필드를 나열할 수 있으며, 튜플의 형태로 반환됩니다.
- flat (선택적): True로 설정하면 결과를 평평한 리스트(단일 값 리스트)로 반환하며, False로 설정하면 결과를 튜플의 리스트로 반환합니다. 기본값은 False입니다.
- 필드 하나만 추출
from myapp.models import Book
Book 모델에서 title 필드만 추출
titles = Book.objects.values_list('title', flat=True)
- 필드 여러개 추출
from myapp.models import Book
data = Book.objects.values_list('title', 'author')
print(list(data))
'개발 > Django' 카테고리의 다른 글
Django Logging 에러 해결 방법 (0) | 2025.03.04 |
---|---|
DRF Spectacular에서 Swagger 파라미터 순서 변경하기 (0) | 2025.02.06 |
Django 윈도우 마이그레이션 파일 일괄 제거 (0) | 2024.10.21 |
Django에서 대용량 데이터 처리하기: bulk_create 메서드 활용하기 (0) | 2024.01.16 |
Django PostgreSQL 대용량 데이터 분할 저장 (0) | 2023.12.30 |