查询限制和订单无法在django中一起使用

时间:2010-11-09 11:30:27

标签: sql django postgresql django-models

(我有一个django 1.1.2和postgresql作为开发环境。) 我有两个问题:

tables = Table.objects.filter(is_active = True,
                               finishes_at__lt=datetime.datetime.now()
                              ).order_by("-starts_at", "weight")[:20]

另一个是

tables = Table.objects.filter(is_active = True,
                              finishes_at__lt=datetime.datetime.now()
                             ).order_by("-starts_at", "weight")

这两个查询都是相同的,除了第一个查询最后有[:20](LIMIT 20)。 但是当我运行这两个查询时。我看到结果集有不同的顺序。有没有办法纠正这个?

注意: 我在dbshel​​l中运行查询,我看到查询实际上以不同的顺序给出结果。这里是django生成的查询

SELECT "table_table"."id" FROM "table_table" 
WHERE ("table_table"."is_active" = True  
       AND "table_table"."finishes_at" < '2010-11-09 11:57:48.482720' )
ORDER BY "table_table"."starts_at" DESC, "table_table"."weight" ASC

且有限制的是

SELECT "table_table"."id" FROM "table_table" 
WHERE ("table_table"."is_active" = True  
       AND "table_table"."finishes_at" < '2010-11-09 11:57:48.482720' ) 
ORDER BY "table_table"."starts_at" DESC, "table_table"."weight" ASC LIMIT 20

1 个答案:

答案 0 :(得分:1)

+1的详细信息,但是对我来说听起来有点可疑,你实际上设法让datetime.datetime.now()产生相同的值并捕获SQL,所以请确认你确实传递了相同的值并且上面的SQL实际上是在日志中捕获的。

就答案而言,我只能部分地解决它 - 从SQL的角度来看。 当针对相同数据运行时,这两个SQL将产生相同的顺序。

你可以计算

因此,假设SQL确实来自日志并且它们是在相同的数据上运行的,那么您要么在django端进一步操作,要么测试结果不好。