"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Django에서 MySQL의 GROUP_CONCAT 함수를 복제하는 방법은 무엇입니까?

Django에서 MySQL의 GROUP_CONCAT 함수를 복제하는 방법은 무엇입니까?

2025-01-21에 게시됨
검색:788

How to Replicate MySQL\'s GROUP_CONCAT Function in Django?

MySQL의 GROUP_CONCAT에 해당하는 Django

Django 프로젝트에서는 쿼리를 실행하여 다양한 유형의 개수와 쉼표를 검색할 수 있습니다. 이름이 구분된 목록입니다. MySQL은 이 작업을 위해 GROUP_CONCAT 함수를 제공하지만 Django에 해당하는 함수를 찾는 것은 까다로울 수 있습니다.

'과일':

ID유형이름
0사과후지
1사과mac
2주황색배럴

원하는 출력 상태:

유형개수이름 사과2"fuji,mac"주황색1"navel"

관습 집계 함수

원시 SQL 쿼리 없이 이를 달성하려면 Django에서 사용자 정의 집계 함수를 생성하세요.

프로젝트에 다음 코드를 추가하세요:
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)
from django. db.models 가져오기 집계 클래스 Concat(집계): 함수 = 'GROUP_CONCAT' template = '%(함수)s(%(distinct)s%(expressions)s)' def __init__(self, 표현식, independent=False, **extra): super(Concat, self).__init__( 표현, 뚜렷한='DISTINCT ', 다른 경우 '', 출력 필드=CharField(), **extra)

사용법

다음과 같이 사용자 정의 집계 함수를 사용합니다:
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)
query_set = Fruits.objects.values('type'). 주석을 달다( 개수=개수('유형'), 이름=Concat('이름') ).order_by('-count')

이 쿼리는 원하는 출력이 포함된 QuerySet을 반환합니다.

출력 예

'과일 ' 테이블에서 query_set에는 다음이 포함됩니다:
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)
{ '유형': '사과', '개수': 2, '이름': '후지,맥' }, { '유형': '주황색', '개수': 1, '이름': '배럴' },

결론

사용자 정의 집계 함수를 생성하면 Django에서 GROUP_CONCAT과 유사한 기능을 쉽게 달성할 수 있으므로 다양한 값의 개수를 검색하고 데이터베이스 테이블의 관련 이름 또는 값을 쉼표로 구분한 목록입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3