【发布时间】:2019-03-26 14:30:11
【问题描述】:
所以我有一个数据库来跟踪某些维基百科的编辑。在某些需要的情况下,数据库可能会多次将相同的编辑保存到数据库中,其中一列具有不同的值。
我希望能够创建一个基于rc_id 列删除重复行的查询集,这与重复编辑相同。我不在乎哪些重复行被丢弃,因为我只需要非唯一信息。
如果我使用的是 PostgreSQL 数据库,我可以通过 queryset.objects.filter(field=filter).distinct('rc_id') 使用 DISTINCT ON 功能。但是,在 MySQL 中,此功能不可用。
已通过告诉人们使用.values_list('rc_id').distinct() 回答了有关此主题的其他 SO 问题,但是我希望结果仍然是用于进一步过滤的查询集,而不是值列表。如何在查询集级别执行此操作,或者在必要时使用原始 SQL 查询?
【问题讨论】:
-
values_list的返回值是一个QuerySet,它支持filter。你能举一个不适合你的特定代码的例子吗? -
嗯。我做了
ordered_queryset = queryset.order_by('-timestamp').values_list('domain', 'timestamp', 'username', 'page_title', 'edit_summary', 'rc_id').distinct()和后来的ordered_queryset.order_by('timestamp')[0].timestamp.date(),在添加values_list组件之前效果很好,但现在引发了错误'tuple' object has no attribute 'timestamp'。 -
我刚刚找到了
named=True选项,现在一切正常。感谢您对答案的推动!