Maison  >  Article  >  base de données  >  Comment la méthode `select_rated` de Django peut-elle être utilisée pour obtenir un effet de jointure interne lorsque vous travaillez avec des tables liées ?

Comment la méthode `select_rated` de Django peut-elle être utilisée pour obtenir un effet de jointure interne lorsque vous travaillez avec des tables liées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 05:51:02830parcourir

How can Django's `select_related` method be used to achieve an inner join effect when working with related tables?

Jointure interne dans Django : connexion de tables associées

Pour afficher les données de plusieurs tables liées dans Django, une jointure interne est souvent nécessaire. Dans cet article, nous allons explorer comment effectuer une jointure interne à l'aide de l'ORM (Object-Relational Mapper) de Django.

Relations de modèle

Le models.py dans le le code fourni définit les relations de table suivantes :

  • pays vers paysétat (clé étrangère)
  • paysétat vers ville (clé étrangère)
  • publication vers pays, paysétat et city ​​(clés étrangères)

Jointure interne utilisant select_rated

Pour obtenir un effet de jointure interne, la méthode select_rated de Django peut être utilisée. Il présélectionne les objets associés ainsi que les objets principaux, réduisant ainsi le nombre de requêtes de base de données requises pour accéder aux données associées.

Dans vues.py, le code suivant peut être utilisé pour effectuer une jointure interne :

<code class="python">pubs = publication.objects.select_related('country', 'country_state', 'city')</code>

Inspection du SQL généré

À l'aide de str(pubs.query), la requête SQL générée peut être inspectée. Cela ressemblera à la requête SQL fournie, avec des jointures internes entre les tables :

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

Accès aux données associées

Après la jointure interne, les données associées sont accessibles via les attributs d'objet de modèle respectifs. Par exemple, pour afficher le nom de la ville pour chaque publication :

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

En utilisant select_rated de Django, les jointures internes peuvent être efficacement implémentées pour récupérer les données des tables associées, réduisant ainsi les requêtes de base de données et améliorant les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn