Heim  >  Artikel  >  Backend-Entwicklung  >  Wann sollte man Select_Related vs. Prefetch_Related von Django ORM verwenden?

Wann sollte man Select_Related vs. Prefetch_Related von Django ORM verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-10-23 17:52:12515Durchsuche

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

Der Unterschied zwischen den Methoden „select_lated“ und „prefetch_lated“ von Django ORM

In Django ORM dienen die Methoden „select_lated“ und „prefetch_lated“ unterschiedlichen Zwecken für die Verwaltung von Beziehungen in Datenbankabfragen.

select_lated

Djangos Methode „select_lated“ ruft verwandte Modelldaten während einer Datenbankabfrage ab, indem sie SQL-Joins durchführt. Es ruft die ausgewählten Felder der zugehörigen Modelle effizient ab und minimiert so die Notwendigkeit nachfolgender Abfragen. Dieser Ansatz eignet sich besonders für Beziehungen mit Fremdschlüssel- oder OneToOneField-Verbindungen.

prefetch_lated

Im Gegensatz zu select_lated führt prefetch_lated keine SQL-Joins durch. Stattdessen werden separate Abfragen ausgeführt, um verwandte Modelle abzurufen. Die Daten werden dann in Python „zusammengefügt“. Diese Methode ist vorteilhaft für Beziehungen mit ManyToManyFields oder umgekehrten Fremdschlüsselverbindungen.

Beispiel

Betrachten Sie die folgende Modellkonfiguration:

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

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

Zum Abrufen einen Autor mit seinen zugehörigen Büchern mithilfe von „select_related“:

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

Um einen Autor mit seinen zugehörigen Büchern mithilfe von „prefetch_lated“ abzurufen:

<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>

Während beide Methoden verwandte Daten abrufen, ist „select_lated“ optimal für einzelne -Objektbeziehungen mit begrenzten redundanten Spalten. Im Gegensatz dazu wird prefetch_lated für Viele-zu-Viele-Beziehungen oder spärliche umgekehrte Fremdschlüsselbeziehungen bevorzugt, um die Datenbankkommunikation zu minimieren. Es kann jedoch zu doppelten Objekten in der Python-Darstellung der Daten kommen.

Das obige ist der detaillierte Inhalt vonWann sollte man Select_Related vs. Prefetch_Related von Django ORM verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn