Django での重複値の選択: ORM および SQL ソリューション
Django では、一意でないフィールドを持つモデルがある場合、重複した値がある場合は、少なくとも 1 つの重複した値を含むすべての行を取得する必要がある場合があります。これは、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)
これは、名前フィールドとカウントのみを含む ValuesQuerySet を返します。 ID フィールドの。通常の 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 の最適化機能を活用できる Django ORM ソリューションが推奨されます。ただし、複雑なクエリや大規模なデータセットの場合は、生の SQL ソリューションの方がパフォーマンスが向上する可能性があります。
以上がORM と SQL を使用して Django で重複する値を効率的に選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。