Sélection de valeurs en double dans Django : une solution ORM et SQL
Dans Django, si vous avez un modèle avec des champs non uniques qui peuvent ont des valeurs en double, vous devrez peut-être récupérer toutes les lignes avec au moins une valeur en double. Ceci peut être réalisé en utilisant à la fois l'ORM Django et le SQL brut.
Solution Django ORM :
Pour sélectionner des lignes avec des valeurs de champ en double à l'aide de l'ORM Django, vous pouvez utiliser l'approche suivante :
from django.db.models import Count dupes = Literal.objects.values('name') .annotate(Count('id')) .order_by() .filter(id__count__gt=1)
Cela renverra un ValuesQuerySet contenant uniquement le champ de nom et un nombre de champs d'identification. Pour obtenir un QuerySet standard, vous pouvez l'utiliser comme sous-requête :
Literal.objects.filter(name__in=[item['name'] for item in dupes])
Solution SQL :
Comme alternative à la solution Django ORM, vous pouvez également utilisez du SQL brut comme ceci :
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT((name)) > 1 );
Comparaison et performances Considérations :
La solution Django ORM est généralement préférée car elle est plus concise et peut exploiter les fonctionnalités d'optimisation de Django. Cependant, pour les requêtes complexes ou les ensembles de données volumineux, la solution SQL brute peut offrir de meilleures performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!