我使用的是django 1.6.5,并且已经登录了MySQL的常规查询,所以我可以看到SQL命中了MySQL。
我注意到在Django的查询集中指定一个更大的限制是行不通的:

>>> from blog.models import Author
>>> len(Author.objects.filter(pk__gt=0)[0:999])
>>> len(Author.objects.all()[0:999])

mysql的常规日志显示两个查询都有LIMIT 21
但是,小于21的限制是可行的,例如,len(Author.objects.all()[0:10])将生成带有LIMIT 10的SQL。
为什么?有什么需要我配置的吗?

最佳答案

当您从shell进行查询时,会发生这种情况—添加了LIMIT子句以停止终端在调试时填充数千条记录:
您正在打印(或至少尝试打印)的repr()。
查询集。以避免人们意外地尝试检索和打印
一百万个结果,我们(好吧,我)把它改成只检索和打印
前20个结果并打印“剩余部分被截断”,如果还有更多。
这是通过将查询限制为21个结果(如果有21个结果
结果有超过20个,所以我们打印“截断”消息)。
这只发生在repr()中——也就是说,它只用于诊断
印刷。没有正常的用户代码会自动包含此限制,因此
您很高兴地创建了一个重复超过一百万个结果的查询集。
Source

10-05 20:25
查看更多