ada*_*ith 12 python django django-models django-orm
我正在使用Django 1.6.5并且有MySQL的通用查询日志,所以我可以看到sql命中MySQL.
我注意到在Django的QuerySet中指定一个更大的限制是行不通的:
>>> from blog.models import Author
>>> len(Author.objects.filter(pk__gt=0)[0:999])
>>> len(Author.objects.all()[0:999])
Run Code Online (Sandbox Code Playgroud)
MySQL的一般日志显示两个查询都有LIMIT 21.
但是小于21的限制可以起作用,例如len(Author.objects.all()[0:10])可以生成一个sql LIMIT 10.
这是为什么?我需要配置什么吗?
Django OFFSET使用Python的数组切片语法实现。如果要偏移前10个元素,然后显示后5个元素,请使用它
MyModel.objects.all()[OFFSET:OFFSET+LIMIT]
Run Code Online (Sandbox Code Playgroud)
例如,如果您想在偏移量为10之后检查5位作者,那么您的代码将如下所示:
Author.objects.all()[10:15]
Run Code Online (Sandbox Code Playgroud)
您可以在Django官方文档中了解更多信息
和在 Django 中的工作方式与我们期望LIMIT的OFFSET工作方式不同。
例如。
如果我们必须从第 10 行开始读取接下来的 10 行并且指定:
Author.objects.all()[10:10]
Run Code Online (Sandbox Code Playgroud)
它将返回空记录列表。为了获取接下来的 10 行,我们必须将偏移量添加到限制中。
Author.objects.all()[10:10+10]
Run Code Online (Sandbox Code Playgroud)
它将返回从第 10 行开始的接下来 10 行的记录列表。
| 归档时间: |
|
| 查看次数: |
14857 次 |
| 最近记录: |