如何在django中删除具有重复列的行

Posted

技术标签:

【中文标题】如何在django中删除具有重复列的行【英文标题】:How to delete rows with duplicate columns in django 【发布时间】:2017-12-23 11:53:30 【问题描述】:

我有模特

class Foo(models.Model): 
     first = models.CharField()
     second = models.CharField()

我的数据是

first second
1     2
1     2
1     2
3     4

现在我想删除所有重复的行并保留一个条目。最终结果

first second
1     2
3     4

我该怎么做?我检查了这个问题,但无法正确解决。 Annotate

我试过了

foo_ids = Foo.objects.annotate(first_c=Count('first'), second_c=Count('second')).filter(first_c__gt=1, second_c__gt=1).values('first', 'second', 'id')

然后尝试找出如何不删除每个重复项列表中的一个。

【问题讨论】:

这是回答您问题的好帖子。 ***.com/a/5879542/8326247 【参考方案1】:
for row in Foo.objects.all():
    if Foo.objects.filter(first=row.first,second=row.second).count() > 1:
        row.delete()

你可以试试这个

【讨论】:

【参考方案2】:

我最终这样做了。

from django.db.models import Count
duplicate_foo = Foo.objects.values('req_group','child_program__id').annotate(id_c=Count('id')).filter(id_c__gt=1)
for dups in duplicate_foo:
    for i, val in enumerate(Foo.objects.filter(first=dups['first'],                                                      
                                               second=dups['second'])):
        if i ==0:
            continue
        val.delete()

不是最优化的解决方案。但它有效。

【讨论】:

速度取决于你有多少副本。如果您的大部分记录没有重复,这比 Exprator 的回答要快。

以上是关于如何在django中删除具有重复列的行的主要内容,如果未能解决你的问题,请参考以下文章

如何根据谷歌表格中的名称删除重复的行?

VBA比较两个列表并删除不同列中具有重复值的行

如何使用 VBA 在 Excel 宏中删除具有两列的重复项?

如何删除R中两列中具有相同值但ID不同的行[重复]

我如何从数据框中删除具有重复/重复索引的行[重复]

如何在 MySQL 中删除具有几个相同值的行?