Python 如何删除现有数据库中的重复记录?(未定义唯一约束)

Python 如何删除现有数据库中的重复记录?(未定义唯一约束),python,django,database,django-models,Python,Django,Database,Django Models,我正在从事一个需要改进数据库模式、查询速度和模板继承的项目。例如,有一个菜单模型缺少唯一约束(见下文) 为了提高模型的数据完整性,我计划通过向seasure字段添加unique=True约束来添加迁移 在应用迁移之前,我检查了数据库中的所有菜单实例,以查看是否可能发生完整性错误。检查的结果是,有3个模型实例具有分配给季节的相同值 在本例中,我想从现有数据库中删除除1个外的所有菜单实例,保留哪一个并不重要。实现这一点的一些方法是什么 class Menu(models.Model): se

我正在从事一个需要改进数据库模式、查询速度和模板继承的项目。例如,有一个菜单模型缺少唯一约束(见下文)

为了提高模型的数据完整性,我计划通过向
seasure
字段添加
unique=True
约束来添加迁移

在应用迁移之前,我检查了数据库中的所有菜单实例,以查看是否可能发生完整性错误。检查的结果是,有3个模型实例具有分配给
季节的相同值

在本例中,我想从现有数据库中删除除1个外的所有菜单实例,保留哪一个并不重要。实现这一点的一些方法是什么

class Menu(models.Model):
    season = models.CharField(max_length=20)
    items = models.ManyToManyField('Item', related_name='items')
    created_date = models.DateTimeField(
            default=timezone.now)
    expiration_date = models.DateTimeField(
            blank=True, null=True)

    def __str__(self):
        return self.season

如果您使用的是Postgresql,则可以使用以下代码:

all_unique_seasure=Menu.objects.distinct('seasure')。value_list('id',flat=True)
Menu.objects.exclude(id\u in=all\u unique\u seasure).delete()
此外,如果您使用的是其他数据库,则可以使用以下代码:

used_id=list()
对于Menu.objects.values('id','seasure')中的i:
used_id.append(i['id'])
Menu.objects.filter(seasure=i['seasure']).exclude(id\uuuu-in=used\uid).delete()

1)2)这些帮助中的任何一个?这不会删除示例2中的所有模型实例吗?如果模型实例id为
id=1
id=2
id=3
,则第一次迭代将删除id=2
id=3
的实例,因为
id=i['id']
等于1。在第二次迭代时,
id=1
的模型实例不会被删除,因为它是唯一剩下的模型实例,
id=i['id']
将是2?