如何在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中删除具有重复列的行的主要内容,如果未能解决你的问题,请参考以下文章