在 Django 中选择重复值:ORM 和 SQL 解决方案
在 Django 中,如果您有一个包含非唯一字段的模型,可能会如果有重复值,您可能需要检索至少具有一个重复值的所有行。这可以使用 Django ORM 和原始 SQL 来实现。
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)
这将返回一个仅包含 name 字段和 id 字段计数的 ValuesQuerySet。要获取常规 QuerySet,您可以将其用作子查询:
Literal.objects.filter(name__in=[item['name'] for item in dupes])
SQL 解决方案:
作为 Django ORM 解决方案的替代方案,您还可以像这样使用原始 SQL:
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT((name)) > 1 );
比较和性能注意事项:
Django ORM 解决方案通常是首选,因为它更简洁并且可以利用 Django 的优化功能。然而,对于复杂的查询或大型数据集,原始 SQL 解决方案可能会提供更好的性能。
以上是如何使用 ORM 和 SQL 在 Django 中高效地选择重复值?的详细内容。更多信息请关注PHP中文网其他相关文章!