집 >데이터 베이스 >MySQL 튜토리얼 >Django 모델에서 중복된 필드 값이 있는 행을 효율적으로 찾고 검색하려면 어떻게 해야 합니까?
중복 필드 값에 대한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!