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?