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_address
desduplicado, 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