首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django查询限制与streamingHttpResponse

Django查询限制与streamingHttpResponse
EN

Stack Overflow用户
提问于 2014-08-14 21:42:23
回答 2查看 314关注 0票数 1

我正在用外键过滤模型的对象。结果是30.000条记录,而我的共享主机服务器出现内存错误。

如何编写部分查询(例如,查询限制为1000个结果)?

您认为在模板中使用StreamingHttpResponse有帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-14 23:25:20

使用Python的数组拼接表示法,可以很容易地在Django中限制查询。您可以在任何查询中使用此方法。下面是一些示例:

代码语言:javascript
复制
# Will return only the first 1000 objects in the query
queryset = MyModel.objects.filter(some_field=some_value)[:1000]  

# Will return only the first 500 objects
queryset = MyModel.objects.all()[:500] 

# Will return the first 1000 objects of the filtered query ordered by the objects pk
queryset = MyModel.objects.filter(some_field=some_value).order_by('pk')[:1000] 

# Will return the 25th through 50th object
queryset = MyModel.objects.all()[25:50] 

# Will return all objects but the first 10
queryset = MyModel.objects.all()[10:] 

Django在这一点上很聪明,它只会查询所需的内容,然后停止,而不是收集整个查询,然后将其余的查询删除。

有关更多细节,请参见这里的文件

票数 2
EN

Stack Overflow用户

发布于 2021-02-06 12:49:18

您可以使用以下方法。它将遍历按主键排序的Django Queryset。

代码语言:javascript
复制
def queryset_iterator(queryset, chunksize=1000):
    pk = 0
    last_pk = queryset.order_by("-pk")[0].pk
    queryset = queryset.order_by("pk")
    while pk < last_pk:
        for row in queryset.filter(pk__gt=pk)[:chunksize]:
            pk = row.pk
            yield row
        gc.collect()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25318019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档