首頁  >  文章  >  後端開發  >  何時使用 Django ORM 的 select_lated 與 prefetch_lated?

何時使用 Django ORM 的 select_lated 與 prefetch_lated?

Susan Sarandon
Susan Sarandon原創
2024-10-23 17:52:12515瀏覽

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

Django ORM 的 select_lated 和 prefetch_lated 之間的區別

在 Django ORM 中,select_lated 和 prefetch_lated 方法在管理資料庫中的關係方面具有不同的用途。

select_lated

Django 的 select_lated 方法透過執行 SQL 連線在資料庫查詢期間取得相關模型資料。它有效地檢索相關模型的選定字段,最大限度地減少後續查詢的需要。此方法特別適合涉及外鍵或 OneToOneField 連接的關係。

prefetch_lated

與 select_lated 不同,prefetch_lated 不執行 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_lated 取得作者及其相關書籍:

<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_lated 取得作者及其相關書籍:
<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_lated 最適合單一數據-具有有限冗餘列的物件關係。相反,對於多對多關係或稀疏反向外鍵關係,預取相關是首選,以最大限度地減少資料庫通訊。但是,它可能會導致資料的 Python 表示形式中出現重複的物件。

以上是何時使用 Django ORM 的 select_lated 與 prefetch_lated?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn