Maison > base de données > tutoriel mysql > Comment puis-je rechercher et récupérer efficacement des lignes avec des valeurs de champ en double dans les modèles Django ?

Comment puis-je rechercher et récupérer efficacement des lignes avec des valeurs de champ en double dans les modèles Django ?

DDD
Libérer: 2024-12-28 00:35:10
original
521 Les gens l'ont consulté

How Can I Efficiently Find and Retrieve Rows with Duplicate Field Values in Django Models?

Interroger les modèles Django pour les valeurs de champ en double

Dans Django, traiter des modèles qui autorisent des valeurs de champ en double peut poser des défis. Considérons un modèle avec un champ de nom non unique. Pour sélectionner des lignes avec des valeurs de nom en double, voici les solutions possibles :

Solution SQL simple

La requête SQL fournie filtre efficacement les lignes avec des noms en double :

select * from literal where name IN (
    select name from literal group by name having count((name)) > 1
);
Copier après la connexion

Solution Django ORM

Alors que Django ORM ne le fait pas fournit une méthode directe pour filtrer les valeurs de champ en double, vous pouvez y parvenir avec une certaine ingéniosité :

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

Ce code crée une requête qui regroupe les lignes par leur champ de nom, compte les occurrences de chaque nom unique et filtre pour les lignes avec plus d'une occurrence.

Amélioration de la solution Django ORM

Pour récupérer les lignes réelles modèle d'objets au lieu d'un ensemble de requêtes de valeurs, vous pouvez utiliser l'opérateur in :

Literal.objects.filter(name__in=[item['name'] for item in dupes])
Copier après la connexion

Ce code construit une nouvelle requête qui filtre le modèle littéral par les noms trouvés dans l'ensemble de requêtes dupes.

Cette approche fournit une solution plus proche de celle de Django tout en conservant la précision de la requête SQL simple. Il convient de noter que cette méthode peut avoir des implications sur les performances si le nombre de lignes en double est important. Dans de tels cas, l'utilisation de SQL brut avec des optimisations spécifiques à la base de données peut être plus efficace.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal