在 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)
此表達式來完成此任務:
此表達式來完成此任務:
此表達式來完成此任務:
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])
此運算式按名稱、計數對模型實例進行分組每個名稱出現的次數,並過濾結果以僅包含具有重複實例的名稱。
增強的 Django ORM 方法select * from literal where name IN ( select name from literal group by name having count((name)) > 1 );雖然之前的 ORM 方法提供了必要的功能,它只傳回名稱和計數資訊。要取得實際記錄,可以根據找到的重複名稱建構一個常規查詢集:SQL 方法對於那些喜歡純 SQL解決方案的人,以下查詢將產生所需的結果:此查詢利用子查詢來查找重複的名稱,然後從主表中選擇名稱與重複項之一匹配的所有行。
以上是如何使用 ORM 和 SQL 在 Django 中選擇具有重複欄位值的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!