Maison >base de données >tutoriel mysql >Comment répliquer la fonctionnalité GROUP_CONCAT de MySQL dans Django ?

Comment répliquer la fonctionnalité GROUP_CONCAT de MySQL dans Django ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-19 00:04:02548parcourir

How to Replicate MySQL's GROUP_CONCAT Functionality in Django?

Obtenir la fonctionnalité GROUP_CONCAT dans Django

En développant le concept de GROUP_CONCAT dans MySQL, Django propose une approche alternative pour obtenir des résultats similaires. Dans Django, GROUP_CONCAT peut être émulé grâce à l'utilisation d'une fonction d'agrégation personnalisée.

Création d'une fonction d'agrégation Concat :

from django.db.models import Aggregate

class Concat(Aggregate):
    function = 'GROUP_CONCAT'
    template = '%(function)s(%(distinct)s%(expressions)s)'

    def __init__(self, expression, distinct=False, **extra):
        super(Concat, self).__init__(
            expression,
            distinct='DISTINCT ' if distinct else '',
            output_field=CharField(),
            **extra)

Avec cette fonction d'agrégation personnalisée, vous peut désormais effectuer des opérations GROUP_CONCAT dans les ensembles de requêtes Django.

Exemple Utilisation :

Considérons un tableau de fruits avec les données suivantes :

id type name
0 apple fuji
1 apple mac
2 orange navel

Pour récupérer le nombre de différents types de fruits ainsi qu'une liste de leurs noms séparés par des virgules :

query_set = Fruits.objects.values('type').annotate(count=Count('type'),
                       name = Concat('name')).order_by('-count')

Cet ensemble de requêtes renverra les résultats suivants :

type count name
apple 2 fuji,mac
orange 1 navel

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