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
Libérer: 2024-12-02 21:48:10
original
670 Les gens l'ont consulté

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()
Copier après la connexion

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')]
Copier après la connexion

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()
)
Copier après la connexion

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

SELECT designation, COUNT(designation) AS dcount
FROM members
GROUP BY designation
Copier après la connexion

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}]
Copier après la connexion

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')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal