在没有PostgreSQL的情况下,如何从Django查询集中的一列中过滤不同的值?

时间:2018-10-22 13:29:28

标签: python django

因此,我有一个数据库来跟踪某些Wikipedia编辑。在某些需要的情况下,数据库可以将同一编辑多次保存到db中,其中一列具有不同的值。

我希望能够创建一个基于rc_id列删除重复行的查询集,这与重复编辑相同。我不在乎哪些重复行会被丢弃,因为我只需要非唯一信息。

如果我使用的是PostgreSQL数据库,则可以通过queryset.objects.filter(field=filter).distinct('rc_id')使用DISTINCT ON功能。但是,在MySQL中,此功能不可用。

关于此主题的其他SO问题已通过告诉人们使用.values_list('rc_id').distinct()得到了解答,但是我希望结果仍然是用于进一步过滤的查询集,而不是值列表。如何在查询集级别执行此操作,或者在必要时如何使用原始SQL查询执行此操作?

1 个答案:

答案 0 :(得分:0)

借助上面的HåkenLid,我的解决方案是:

ordered_queryset = queryset.order_by(
    '-timestamp').values_list(
        'domain', 'timestamp', 'username', 'page_title', 'edit_summary', 'rc_id', named=True
            ).distinct()

为澄清起见,对于重复的编辑,values_list中的每个值都是相同的,因此我省略了唯一的列。这样,这将返回具有正确过滤的行的查询集。