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
Libérer: 2024-11-19 00:04:02
original
528 Les gens l'ont consulté

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

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

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal