Django QuerySet 包含重复的条目

drs*_*drs 6 django django-queryset python-3.x

我正在尝试使用 django 的 ORM 检索表的一些内容。

results = Table.objects.using('production').filter(foreign_id=76)
results.count()  # 129807
Run Code Online (Sandbox Code Playgroud)

该id表的列是主键,因此具有唯一条目。但是,返回的 QuerySet 有重复的条目:

results[7999].id  # 27177397
results[121679].id  # 27177397
Run Code Online (Sandbox Code Playgroud)

这不仅仅是id重复的,而是整行。其实QuerySet的最后8000条结果都是重复的(我想到了前8000条但是我没有验证过)。

当然,我已经验证id了表中的列是唯一的,并且在27177397直接(或通过 django ORM)使用 sql查询时,我只得到一个结果。

results = Table.objects.using('production').filter(id=27177397, foreign_id=76)
results.count()  # 1
Run Code Online (Sandbox Code Playgroud)

怎么会这样?

我使用 pyscopg2 2.5.3 使用 django 1.6.7。

dan*_*era 4

按外键过滤强制连接(另外,默认 order by 可以引发连接)。使用distinct删除重复行:

results = ( Table
            .objects
            .using('production')
            .filter(foreign_id=76)
            .order_by()
            .distinct()
            )
Run Code Online (Sandbox Code Playgroud)

  • 哦,我明白了,我过去两天花在缩小这个可怕结果的范围上是因为 django 可以做*神秘的连接*。这就说得通了。我喜欢这个功能。按这个过滤..按那个排序..你的表连接就会改变!最好不要在“results.query()”字符串中显示任何指示,否则它就不够神秘。谢谢@danihp,为我解决了这个问题。如果我使用逻辑和理性的话,我永远不会到达那里。 (2认同)