在以下基本查询中,是否有一种简单的方法来删除重复项:

email_list = Emails.objects.order_by('email')

我试着用duplicate(),但没用.在没有重复项的情况下执行此查询的确切语法是什么?

推荐答案

这个查询不会给你重复的数据——也就是说,它会给你数据库中所有的行,通过邮箱排序.

然而,我想你的意思是,你的数据库中有重复的数据.在这里添加distinct()没有帮助,因为即使你只有一个字段,你也有一个自动的id字段——所以id+邮箱的组合不是唯一的.

假设您只需要一个字段email_address,消除重复,您可以这样做:

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

但是,您应该真正解决根本问题,并从数据库中删除重复数据.

例如,按邮箱字段删除重复邮箱:

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()

或书名:

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()

Sql相关问答推荐

在SQL中对字符串进行逻辑排序,将数字部分排序为数字值

在SQL中向每个子字节组添加字节行

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

替换条件中的单元格值

在Postgres中实现合并功能的干净方法,因为当目标/源不匹配时

部分匹配表中元素的MariaDB查询查找结果

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

每年独特口味的冰淇淋数量

在xml.Modify方法中使用子字符串和可能的替代方法

表函数的作用域和功能

从JSON值数组创建扁平数组Athena

使用左外部联接更正列中第+1行的值时重复

SQL:使用年/月/日分区查询某个时间段的数据

连续天跟踪购买情况(将标记返回到另一列?)

使用多个数据库调用重载 CQRS 模式

在presto sql中解析带有区域的时间格式

获取所有用户的第一次和最后一次发货以及到达日期

更新表 A,然后将新值插入表 B(包含更新内容的历史日志(log))

PlSql 陷入死循环

来自 SQL Server 的树层次 struct 图的 JSON