select_realted
select_related는 SQL의 JOIN 연산을 사용하여, 관련된 객체를 단일 쿼리로 데이터베이스로부터 미리 로드합니다. 이 메서드는 1:1 또는 1:N 관계에 사용되며, 데이터베이스의 부하를 감소시키는 데 효과적입니다.
from django.db import models
class Author(models.Model):
name = models.ChareFiled(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
## 쿼리
books = Book.objects.select_related('author').all()
for book in books:
print(book.title, book.author.name)
prefetch_related
prefetch_related는 Python 코드 내에서 별도의 쿼리르 수행하여 관련 객체르 자져오고, 이를 메모리에 캐싱하여 사용합니다. 이 방법은 N:N 또는 1:N 관계에서 유용하며, 특히 여러 관계를 거쳐 정보를 가져와야 할 때 유용합니다.
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField('Book', related_name='authors')
class Book(models.Model):
title = models.CharField(max_length=100)
#쿼리
authors = Author.objects.prefetch_related('books').all()
for author in authors:
print(author.name)
for book in author.books.all():
print(book.tilte)
'IT > Python' 카테고리의 다른 글
Djnago, 테스트 폴더 안 테스트 파일을 인식하지 못할 때 (0) | 2024.10.31 |
---|---|
APIClient와 APIRequestFactory의 차이 (1) | 2024.10.09 |
Django 사용자 모델 커스터마이징하기 (1) | 2024.10.09 |
Django, foreignkey error - 무결성에 문제가 없더라도 migrations 폴더와 pycache에 문제가 없는지 살펴보기 (0) | 2024.04.12 |
Django, 서드파티 앱에 대해서 (0) | 2024.04.08 |