Django 查询具有重复字段值的行
假设我们有一个带有非唯一字段的 Django 模型。我们需要从模型中选择该字段至少有一个重复值的所有行。
纯 SQL 方法
一种可能的解决方案是使用纯 SQL:
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT(*) > 1 );
Django ORM方法
使用Django的ORM,我们可以通过values()、annotate()、order_by()和filter()的组合达到相同的结果:
from django.db.models import Count dupes = Literal.objects.values('name') \ .annotate(Count('id')) \ .order_by() \ .filter(id__count__gt=1)
由于上面的代码返回一个 ValuesQuerySet,我们需要将其转换为常规 QuerySet 以将其用作过滤器:
duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])
这种方法确保我们只选择具有重复名称值的行。
以上是如何使用 Django ORM 查找具有重复字段值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!