Maison >développement back-end >Tutoriel Python >Comment regrouper des données à l'aide des ensembles de requêtes de Django ?

Comment regrouper des données à l'aide des ensembles de requêtes de Django ?

DDD
DDDoriginal
2024-12-02 21:48:10634parcourir

How to Group Data Using Django's Querysets?

Regroupement de données dans les requêtes Django

Dans Django, la récupération de données de la base de données implique souvent l'utilisation d'ensembles de requêtes. Ces ensembles de requêtes fournissent diverses méthodes pour filtrer, trier et manipuler les données. Une opération courante consiste à regrouper les données par un champ spécifique, similaire à la clause SQL GROUP BY.

Agrégation pour le regroupement

Pour regrouper les données dans Django, on peut utiliser les fonctionnalités d'agrégation de l'ORM. Par exemple, considérons la requête suivante qui récupère tous les membres :

Members.objects.all()

Cette requête renvoie une liste de tuples, chaque tuple représentant les détails d'un membre :

[('Eric', 'Salesman', 'X-Shop'),
 ('Freddie', 'Manager', 'X2-Shop'),
 ('Teddy', 'Salesman', 'X2-Shop'),
 ('Sean', 'Manager', 'X2-Shop')]

Pour regrouper ces résultats par le champ de désignation, on peut utiliser les méthodes values() et annotate() :

from django.db.models import Count

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

Cette requête génère une instruction SQL similaire à :

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

Le résultat est une liste de dictionnaires, chacun représentant une désignation et le nombre de membres pour cette désignation :

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

Pour inclure plusieurs champs dans les résultats, il suffit ajoutez-les comme arguments à la méthode values(), comme indiqué ici :

.values('designation', 'first_name', 'last_name')

Références

Pour plus d'informations sur l'agrégation et regroupement dans Django, reportez-vous aux ressources suivantes :

  • Documentation Django : [Values](https://docs.djangoproject.com/en/stable/ref/models/querysets/#values) , [Annoter](https://docs.djangoproject.com/en/stable/ref/models/querysets/#annotate), [Count](https://docs.djangoproject.com/en/stable/ref/models/querysets/#django.db.models.Count)
  • Documentation Django : [Agrégation](https:// docs.djangoproject.com/en/stable/topics/db/aggregation/), en particulier la section sur [Interaction avec l'ordre par défaut ou order_by()](https://docs.djangoproject.com/en/stable/topics/db/aggregation/#interaction-with-default-ordering-or-orderby)

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