django教程第1部分(p.choice_set.all()以相反的顺序返回)

时间:2013-06-18 06:38:05

标签: python django

https://docs.djangoproject.com/en/1.5/intro/tutorial01/

我正在关注Django教程并接近第1部分的末尾,其中调用p.choice_set.all()我以相反的顺序显示。

例如我得到:再次黑客攻击,天空,不多 而不是:不多,天空,再次黑客攻击

知道为什么我会收到逆序吗?我按照教程指示的顺序输入它。

我正在运行PostgreSQL。

2 个答案:

答案 0 :(得分:2)

如果您没有明确地执行order_by(),则无法保证将返回结果的订单。

不确定PostgreSQL,但对于MySQL,实际上,如果您只根据某个索引列选择行的子集,它会按该索引排序,但是如果你是“re”选择每一行,它将使用表格扫描并按照它们存储在磁盘上的顺序返回结果。

关于磁盘顺序,如果你曾经删除了一行,那么当你下一次插入一行时,它会尝试填充该行使用的空间,所以如果你有......

ID   Name
1    Bob
2    Fred
3    Jim

...然后删除第一行,然后添加一个新行,你得到......

ID   Name
4    Jeff
2    Fred
3    Jim

...此时SELECT * FROM my_table将按顺序4,2,3返回它们,而SELECT * FROM my_table WHERE id > 1将(可能)按顺序2,3,4返回它们。 / p>

答案 1 :(得分:1)

简单说明:

您可以按order_by()订购字段,如果您不使用它,则会按ID排序。这就是您获得尊敬订单的原因。

您可以通过简单的循环检查:

for item in p.choice_set.all():
    print item.id

由于