Maison > base de données > tutoriel mysql > Comment sélectionner efficacement les valeurs en double dans Django à l'aide d'ORM et SQL ?

Comment sélectionner efficacement les valeurs en double dans Django à l'aide d'ORM et SQL ?

Susan Sarandon
Libérer: 2024-12-29 03:40:11
original
798 Les gens l'ont consulté

How to Efficiently Select Duplicate Values in Django Using ORM and SQL?

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)
Copier après la connexion

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])
Copier après la connexion

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
);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal