Django - 从DB中删除重复记录

时间:2017-10-27 19:54:17

标签: django postgresql add-custom-command

我想设置'unique_together'在我的DB(postgres)上。问题是我可能已经在数据库上有重复项,因此迁移可能无法正常工作。所以我看到它 - 在部署之前我需要运行一些脚本来删除所有重复(只留下其中一个)。我更喜欢使用Django Custom Command。

表'映射'看起来像 - Id,user_id,user_role,project_id,user_type。 我想设置'unique_together'对于他们所有人。 我用来检索重复行的脚本是 -

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? 还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

你可以尝试一下:

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)