Django QuerySet 包含重复的条目
Posted
技术标签:
【中文标题】Django QuerySet 包含重复的条目【英文标题】:Django QuerySet contains duplicate entries 【发布时间】:2015-08-09 19:26:33 【问题描述】:我正在尝试使用 django 的 ORM 检索表格的一些内容。
results = Table.objects.using('production').filter(foreign_id=76)
results.count() # 129807
此表的id
列是主键,因此具有唯一条目。但是,返回的 QuerySet 有重复的条目:
results[7999].id # 27177397
results[121679].id # 27177397
不只是重复的id
,而是整个行。其实QuerySet的最后8000个结果都是重复的(我想的是前8000个但我没有验证)。
当然,我已经验证了表中的id
列是唯一的,并且当直接使用sql(或通过django ORM)查询27177397
时,我只会得到一个结果。
results = Table.objects.using('production').filter(id=27177397, foreign_id=76)
results.count() # 1
这怎么可能?
我正在使用 django 1.6.7 和 pyscopg2 2.5.3。
【问题讨论】:
【参考方案1】:按外键过滤会强制加入(此外,默认顺序可以诱导加入)。使用distinct 删除重复行:
results = ( Table
.objects
.using('production')
.filter(foreign_id=76)
.order_by()
.distinct()
)
【讨论】:
哦,我明白了,我过去两天用来缩小这个可怕的结果是因为 django 可以进行神秘的连接。这就说得通了。我喜欢那个功能。按此过滤..按此排序..您的表连接发生变化!最好不要让它在results.query()
字符串中显示任何指示,否则它就不够神秘。谢谢@danihp,为我解决了这个问题。使用逻辑和推理我永远不会到达那里。以上是关于Django QuerySet 包含重复的条目的主要内容,如果未能解决你的问题,请参考以下文章
Django Queryset - 按字母顺序排序,然后将特定条目移到顶部