Um Daten aus mehreren zusammengehörigen Tabellen in Django anzuzeigen, ist oft ein Inner Join erforderlich. 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
To Um einen Inner-Join-Effekt zu erzielen, kann Djangos Methode select_lated verwendet 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:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Inspizieren der Generiertes SQL
Mit str(pubs.query) kann die generierte SQL-Abfrage überprüft werden. Es ähnelt der bereitgestellten SQL-Abfrage mit inneren Verknüpfungen 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 wird der Auf verwandte Daten kann über die jeweiligen Modellobjektattribute zugegriffen werden. 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.
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