(我有一个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)。
但是当我运行这两个查询时。我看到结果集有不同的顺序。有没有办法纠正这个?
注意: 我在dbshell中运行查询,我看到查询实际上以不同的顺序给出结果。这里是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
答案 0 :(得分:1)
+1的详细信息,但是对我来说听起来有点可疑,你实际上设法让datetime.datetime.now()
产生相同的值并捕获SQL,所以请确认你确实传递了相同的值并且上面的SQL实际上是在日志中捕获的。
就答案而言,我只能部分地解决它 - 从SQL的角度来看。 当针对相同数据运行时,这两个SQL将产生相同的顺序。
你可以计算。
因此,假设SQL确实来自日志并且它们是在相同的数据上运行的,那么您要么在django端进一步操作,要么测试结果不好。