>데이터 베이스 >MySQL 튜토리얼 >Django 모델에서 중복된 필드 값이 있는 행을 효율적으로 찾고 검색하려면 어떻게 해야 합니까?

Django 모델에서 중복된 필드 값이 있는 행을 효율적으로 찾고 검색하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-28 00:35:10523검색

How Can I Efficiently Find and Retrieve Rows with Duplicate Field Values in Django Models?

중복 필드 값에 대한 Django 모델 쿼리

Django에서는 중복 필드 값을 허용하는 모델을 처리하는 것이 어려울 수 있습니다. 고유하지 않은 이름 필드가 있는 모델을 생각해 보세요. 중복된 이름 값이 있는 행을 선택하려면 가능한 해결 방법은 다음과 같습니다.

일반 SQL 솔루션

제공된 SQL 쿼리는 중복된 이름이 있는 행을 효과적으로 필터링합니다.

select * from literal where name IN (
    select name from literal group by name having count((name)) > 1
);

Django ORM 솔루션

그동안 Django ORM은 중복 필드 값 필터링을 위한 직접적인 방법을 제공하지 않습니다. 약간의 창의력을 발휘하면 이를 달성할 수 있습니다.

from django.db.models import Count

dupes = Literal.objects.values('name')\
                       .annotate(Count('id'))\
                       .order_by()\
                       .filter(id__count__gt=1)

이 코드는 이름 필드별로 행을 그룹화하는 쿼리를 생성하고 각 항목의 발생 횟수를 계산합니다. 고유한 이름, 두 번 이상 발생하는 행에 대한 필터.

Django ORM 향상 해결 방법

값 쿼리 세트 대신 실제 모델 개체를 검색하려면 in 연산자를 사용할 수 있습니다.

Literal.objects.filter(name__in=[item['name'] for item in dupes])

이 코드는 리터럴 모델을 다음과 같이 필터링하는 새 쿼리를 구성합니다. dupes 쿼리 세트에서 발견된 이름입니다.

이 접근 방식은 일반 SQL 쿼리의 정확성을 유지하면서 Django와 더욱 유사한 솔루션을 제공합니다. 중복 행 수가 많은 경우 이 방법이 성능에 영향을 미칠 수 있다는 점은 주목할 가치가 있습니다. 이러한 경우 데이터베이스별 최적화와 함께 원시 SQL을 사용하는 것이 더 효율적일 수 있습니다.

위 내용은 Django 모델에서 중복된 필드 값이 있는 행을 효율적으로 찾고 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.