Um Daten aus mehreren zusammengehörigen Tabellen in Django anzuzeigen, ist oft ein Inner Join notwendig. In diesem Artikel erfahren Sie, wie Sie mit Djangos ORM (Object-Relational Mapper) einen Inner Join durchführen.
Modellbeziehungen
Die models.py in der Der bereitgestellte Code definiert die folgenden Tabellenbeziehungen:
Inner Join mit select_lated
Um einen Inner-Join-Effekt zu erzielen, kann Djangos Methode „select_lated“ eingesetzt werden. Es wählt die zugehörigen Objekte zusammen mit den Primärobjekten vorab aus und reduziert so die Anzahl der Datenbankabfragen, die für den Zugriff auf die zugehörigen Daten erforderlich sind.
In der Datei „views.py“ kann der folgende Code verwendet werden, um einen Inner Join durchzuführen:
<code class="python">pubs = publication.objects.select_related('country', 'country_state', 'city')</code>
Inspizieren des generierten SQL
Mit str(pubs.query) kann die generierte SQL-Abfrage überprüft werden. Es ähnelt der bereitgestellten SQL-Abfrage mit Inner-Joins zwischen den Tabellen:
SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ... FROM "publication" INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" )
Zugriff auf verwandte Daten
Nach dem Inner-Join kann auf die zugehörigen Daten zugegriffen werden durch die jeweiligen Modellobjektattribute. Um beispielsweise den Städtenamen für jede Veröffentlichung anzuzeigen:
{% for p in pubs %} {{ p.city.city_name}} # p.city has been populated in the initial query # ... {% endfor %}
Durch die Verwendung von Djangos select_lated können Inner Joins effizient implementiert werden, um Daten aus verwandten Tabellen abzurufen, Datenbankabfragen zu reduzieren und die Leistung zu verbessern.
Das obige ist der detaillierte Inhalt vonWie kann die Methode „select_lated“ von Django verwendet werden, um bei der Arbeit mit verwandten Tabellen einen Inner-Join-Effekt zu erzielen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!