"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Django ORM의 select_관련과 prefetch_관련을 언제 사용합니까?

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

2024년 11월 14일에 게시됨
검색:937

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 또는 역외래 키 연결과 관련된 관계에 유용합니다.

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

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)

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

author = Author.objects.select_related('book_set').get(pk=1)
for book in author.book_set.all():
    print(book.title)

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

authors = Author.objects.prefetch_related('book_set').all()
for author in authors:
    for book in author.book_set.all():
        print(book.title)

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

릴리스 선언문 이 글은 1729672608에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3