python - Django:如何删除基于 2 列的重复行?

标签 python django django-orm

我在 this answer 中发现我可以使用原始 SQL 轻松删除表中的重复行(基于 N 列的重复)。

是否有使用 Django ORM 的等价物? 我在 Django 中发现的唯一内容涉及仅基于 1 列的重复。

注意:我知道在 Django 中有一种方法可以防止将来重复(基于几个字段),使用 unique_together 字段(但我以前不知道)。

谢谢。

最佳答案

将另一个答案中的 SQL 直接转换为 Django ORM:

from django.db.models import Min
# First select the min ids
min_id_objects = MyModel.objects.values('A', 'B').annotate(minid=Min('id'))
min_ids = [obj['minid'] for obj in min_id_objects]
# Now delete 
MyModel.objects.exclude(id__in=min_ids).delete()

这将导致 2 个单独的 SQL 查询,而不是另一个答案中提供的一个嵌套 SQL。但我认为这已经足够了。

关于python - Django:如何删除基于 2 列的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32690122/

相关文章:

python - 使用 django-users2 时无法导入 users.form

python - 如何在 Windows 上使用 subprocess.run 运行 bash 命令

python - Matplotlib:获取子图以填充图形

python - uwsgi nginx 连接到 unix 套接字被拒绝

python - 合并两个 QuerySets 或重新排序一个 QS,使得每个第 n 个元素都来自第二个

python - 使用 Django ORM 计算多对多关系的频率和相关性的优雅方法?

python - 如何仅获取外键过滤器的最新记录

python - 从具有给定步幅/步长的 numpy 数组中获取子数组

mysql - Django mysql 数据库不接受日期格式

django - Mako csrf_token 就像 Django 模板中一样