ホームページ > データベース > mysql チュートリアル > Django で MySQL の GROUP_CONCAT 機能を実現するにはどうすればよいですか?

Django で MySQL の GROUP_CONCAT 機能を実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-22 18:05:11
オリジナル
574 人が閲覧しました

How Can I Achieve MySQL's GROUP_CONCAT Functionality in Django?

MySQL の GROUP_CONCAT に相当する Django の関数

概要

MySQL の GROUP_CONCAT 関数は、複数の行ベースの値の連結を可能にする強力なツールです。グループ化基準について。これは、データを集計して値のカンマ区切りリストを作成する場合に便利です。 Django には、GROUP_CONCAT に相当する組み込み関数はありませんが、カスタム集計関数を使用して同様の機能を実現できます。

カスタム集計関数の作成

カスタム集計関数を作成するにはGROUP_CONCAT の動作を複製するため、Django ORM の Aggregate クラスを活用できます。このクラスを使用すると、クエリで使用できるカスタム集計関数を定義できます。

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)
ログイン後にコピー

このカスタム集計関数では、関数属性が 'GROUP_CONCAT' に設定され、必要な集計のタイプを指定します。実行する。 template 属性は、出力文字列の形式を定義します。この場合、これは標準の GROUP_CONCAT テンプレートです。

カスタム集計関数の使用

カスタム集計関数を定義したら、次を使用できます。これを Django クエリで値を連結します:

query_set = Fruits.objects.values('type').annotate(count=Count('type'),
                       name = Concat('name')).order_by('-count')
ログイン後にコピー

ここでは、注釈を使用しています。 Concat 集計関数を名前フィールドに適用するメソッド。結果のクエリセットには辞書のリストが含まれます。各辞書は一意のタイプを表し、出現回数とカンマ区切りの名前の文字列が含まれます。

以上がDjango で MySQL の GROUP_CONCAT 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート