在 Django 中选择具有重复字段值的行
考虑一个具有允许重复值的非唯一名称字段的 Django 模型。要选择名称字段中至少有一个重复值的所有行,可以探索 ORM 和 SQL 方法。
Django ORM 方法
利用 Django 的聚合功能,可以使用以下 ORM 表达式来完成此任务:
from django.db.models import Count Literal.objects.values('name') .annotate(Count('id')) .order_by() .filter(id__count__gt=1)
此表达式按名称、计数对模型实例进行分组每个名称出现的次数,并过滤结果以仅包含具有重复实例的名称。
增强的 Django ORM 方法
虽然之前的 ORM 方法提供了必要的功能,它仅返回名称和计数信息。要获取实际记录,可以根据找到的重复名称构造一个常规查询集:
dupes = Literal.objects.values('name') .annotate(Count('id')) .order_by() .filter(id__count__gt=1) Literal.objects.filter(name__in=[item['name'] for item in dupes])
SQL 方法
对于那些喜欢纯 SQL 解决方案的人,以下查询将产生所需的结果:
select * from literal where name IN ( select name from literal group by name having count((name)) > 1 );
此查询利用子查询来查找重复的名称,然后从主表中选择名称与重复项之一匹配的所有行。
以上是如何使用 ORM 和 SQL 在 Django 中选择具有重复字段值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!