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