sql >> Databasteknik >  >> RDS >> Mysql

Hur gör man en Inner Join i django?

Du letar förmodligen efter select_related , vilket är det naturliga sättet att uppnå detta:

pubs = publication.objects.select_related('country', 'country_state', 'city')

Du kan kontrollera den resulterande SQL-koden via str(pubs.query) , vilket bör resultera i utdata längs följande rader (exemplet är från en postgres backend):

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

De returnerade markörvärdena översätts sedan till lämpliga ORM-modellinstanser, så att när du loopar över dessa publikationer får du tillgång till de relaterade tabellernas värden via deras egna objekt. Dessa åtkomster längs de förvalda framåtriktade relationerna kommer dock inte att orsaka extra db-träffar:

{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}


  1. Subtrahera år från ett datum i PostgreSQL

  2. Implementering av fel- och transaktionshantering i SQL Server

  3. MySQL LÄGG TILL KOLUMN

  4. Exempel på parametriserade frågor