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中文網其他相關文章!