Django-从数据库中删除重复记录

Django-从数据库中删除重复记录,django,postgresql,add-custom-command,Django,Postgresql,Add Custom Command,我想在我的DB(postgres)上设置“unique_together”。问题是我可能已经在DB上有了重复项,所以迁移可能不起作用。因此,正如我所看到的,在部署之前,我需要运行一些脚本来删除所有副本(每个副本只保留一个)。我更喜欢使用Django自定义命令 表“映射”类似于-Id、user\u Id、user\u角色、project\u Id、user\u type。 我想为所有人设置“独特的组合”。 我用来检索重复行的脚本是- duplicates = (Mapping.objects.va

我想在我的DB(postgres)上设置“unique_together”。问题是我可能已经在DB上有了重复项,所以迁移可能不起作用。因此,正如我所看到的,在部署之前,我需要运行一些脚本来删除所有副本(每个副本只保留一个)。我更喜欢使用Django自定义命令

表“映射”类似于-Id、user\u Id、user\u角色、project\u Id、user\u type。 我想为所有人设置“独特的组合”。 我用来检索重复行的脚本是-

duplicates = (Mapping.objects.values('project_id', 'user_id', 'user_type', 'user_role').annotate(
        count=Count('id')).values('project_id', 'user_id', 'user_type', 'user_role').order_by().
           filter(count__gt=1))
它返回包含重复属性的对象列表。 例如:

QuerySet [{'user_id': '2222', 'user_type': '1', 'user_role': '1', 'project_id': UUID('c02bda0e-5488-4519-8f34-96b7f3d36fd6')}, {'user_id': '44444', 'user_type': '1', 'user_role': '1', 'project_id': UUID('8c088f57-ad0c-411b-bc2f-398972872324')}]>
有没有办法直接检索ID? 有更好的方法吗?

你可以试试:

Mapping.objects.values(
    'project_id', 'user_id', 'user_type', 'user_role'
).annotate(count=Count('id')
).annotate(max_id=Max('id')
).values('max_id').order_by().filter(count__gt=1)

可能这将有助于查找和删除重复项,因为“id”是UUID-第1行:从…^中选择MAX(“映射”。“id”)作为“MAX_id”提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。但据我所知,它假设只在第行返回,对吗?在您的情况下,问题在于id类型,您使用uuid并且数据库无法将max函数应用于此类型的字段,您可以为uuid指定自定义函数,例如:[PostgreSQL创建uuid max聚合函数](),对不起,现在我不能给你更多的帮助了