gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:54:22 25 4
gpt4 key购买 nike

我想在我的数据库 (postgres) 上设置“unique_together”。问题是我可能已经在数据库上有重复项,因此迁移可能无法进行。因此,正如我所见 - 在部署之前,我需要运行一些脚本来删除所有重复项(每个重复项只保留一个)。我更喜欢用 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?有没有更好的办法?

最佳答案

你可以试试:

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)

关于Django - 从数据库中删除重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com