Maison >développement back-end >Tutoriel Python >Comment effectuer des requêtes groupées dans Django ?

Comment effectuer des requêtes groupées dans Django ?

DDD
DDDoriginal
2024-12-05 18:07:10277parcourir

How Do I Perform Group By Queries in Django?

Requêtes de groupe par dans Django

Contexte

Lors de l'interrogation d'un modèle Django, vous pouvez rencontrer un scénario dans lequel vous devez effectuer un groupe par opération . Tenter d'utiliser .group_by() comme vous le feriez dans SQL entraîne une erreur.

Fonctionnalités d'agrégation

Au lieu d'utiliser .group_by(), Django fournit des méthodes d'agrégation qui vous permettent d'effectuer des requêtes complexes. impliquant des regroupements. Plus précisément, Count est utile pour compter les occurrences d'un champ particulier.

Exemple

Pour regrouper les résultats par désignation et compter les occurrences, vous utiliserez le code suivant :

from django.db.models import Count

result = (Members.objects
    .values('designation')
    .annotate(dcount=Count('designation'))
    .order_by()
)

Cette requête est similaire à l'instruction SQL suivante :

SELECT designation, COUNT(designation) AS dcount
FROM members GROUP BY designation

La sortie de la requête Django serait dans le form :

[{'designation': 'Salesman', 'dcount': 2}, 
 {'designation': 'Manager', 'dcount': 2}]

Notes supplémentaires

  • Incluez order_by() pour garantir un tri correct.
  • Pour inclure plusieurs champs dans les résultats, transmettez-les comme arguments à .values().
  • Reportez-vous à la documentation de Django sur les valeurs(), annotate() et Count pour en savoir plus informations.

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