Saltar al contenido

Eliminar duplicados en una consulta de Django

Este team de especialistas pasados ciertos días de trabajo y de juntar de información, han obtenido la solución, esperamos que todo este artículo sea de gran utilidad para tu plan.

Solución:

Esta consulta no le dará duplicados, es decir, le dará todas las filas en la base de datos, ordenadas por correo electrónico.

Sin embargo, supongo que lo que quiere decir es que tiene datos duplicados dentro de su base de datos. agregando distinct() aquí no ayudará, porque incluso si solo tiene un campo, también tiene un campo automático id field – por lo que la combinación de id+email no es única.

Suponiendo que solo necesita un campo, email_addressdesduplicado, puede hacer esto:

email_list = Email.objects.values_list('email', flat=True).distinct()

Sin embargo, realmente debería solucionar el problema de raíz y eliminar los datos duplicados de su base de datos.

Ejemplo, eliminación de correos electrónicos duplicados por campo de correo electrónico:

for email in Email.objects.values_list('email', flat=True).distinct():
    Email.objects.filter(pk__in=Email.objects.filter(email=email).values_list('id', flat=True)[1:]).delete()

O libros por nombre:

for name in Book.objects.values_list('name', flat=True).distinct(): 
    Book.objects.filter(pk__in=Artwork.objects.filter(name=name).values_list('id', flat=True)[3:]).delete()

Para verificar duplicados, puede hacer un GROUP_BY y HAVING en Django como a continuación. Estamos usando Django annotations aquí.

from django.db.models import Count
from app.models import Email

duplicate_emails = Email.objects.values('email').annotate(email_count=Count('email')).filter(email_count__gt=1)

Ahora recorriendo los datos anteriores y eliminando todos los demás emails excepto el primero (depende del requerimiento o lo que sea).

for data in duplicates_emails:
    email = data['email']
    Email.objects.filter(email=email).order_by('pk')[1:].delete()

puedes encadenar .distinct() al final de su conjunto de consultas para filtrar duplicados. Consulte: http://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct

Reseñas y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *