>  기사  >  백엔드 개발  >  Django ORM의 select_관련과 prefetch_관련을 언제 사용합니까?

Django ORM의 select_관련과 prefetch_관련을 언제 사용합니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-23 17:52:12515검색

When to Use Django ORM's select_related vs. prefetch_related?

Django ORM의 select_관련과 prefetch_관련의 차이점

Django ORM에서 select_관련 및 prefetch_관련 메소드는 데이터베이스 쿼리의 관계 관리를 위한 고유한 목적을 제공합니다.

select_관련

Django의 select_관련 메소드는 SQL 조인을 수행하여 데이터베이스 쿼리 중에 관련 모델 데이터를 가져옵니다. 관련 모델의 선택된 필드를 효율적으로 검색하여 후속 쿼리의 필요성을 최소화합니다. 이 접근 방식은 외래 키 또는 OneToOneField 연결과 관련된 관계에 특히 적합합니다.

prefetch_관련

select_관련과 달리 prefetch_관련은 SQL 조인을 수행하지 않습니다. 대신, 관련 모델을 검색하기 위해 별도의 쿼리를 실행합니다. 그런 다음 데이터는 Python에서 "결합"됩니다. 이 방법은 ManyToManyFields 또는 역외래 키 연결과 관련된 관계에 유용합니다.

다음 모델 설정을 고려하세요.

<code class="python">class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)</code>

가져오려면 select_관련을 사용하여 관련 도서가 있는 저자:

<code class="python">author = Author.objects.select_related('book_set').get(pk=1)
for book in author.book_set.all():
    print(book.title)</code>

prefetch_관련을 사용하여 관련 도서가 있는 저자를 가져오려면:

<code class="python">authors = Author.objects.prefetch_related('book_set').all()
for author in authors:
    for book in author.book_set.all():
        print(book.title)</code>

두 가지 방법 모두 관련 데이터를 검색하는 반면, select_관련은 단일에 적합합니다. -제한된 중복 열이 있는 개체 관계. 대조적으로, prefetch_관련은 데이터베이스 통신을 최소화하기 위해 다대다 관계 또는 희박한 역외래 키 관계에 선호됩니다. 그러나 데이터의 Python 표현에서 중복된 개체가 발생할 수 있습니다.

위 내용은 Django ORM의 select_관련과 prefetch_관련을 언제 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.