„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wann sollte man Django ORMs select_related vs. prefetch_lated verwenden?

Wann sollte man Django ORMs select_related vs. prefetch_lated verwenden?

Veröffentlicht am 14.11.2024
Durchsuche:179

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_related

Djangos Die 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:

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

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

So rufen Sie einen Autor mit seinen zugehörigen Büchern mit select_related ab:

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

Um einen Autor mit seinen zugehörigen Büchern mit prefetch_lated abzurufen:

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

Während beide Methoden verwandte Daten abrufen, ist select_lated optimal für Einzelobjektbeziehungen mit begrenzten redundanten Spalten. Im Gegensatz dazu wird prefetch_related 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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729672608 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3