【问题标题】:How do I specify max results for a filter query in Django?如何在 Django 中为过滤器查询指定最大结果?
【发布时间】:2011-02-19 21:38:26
【问题描述】:

我想从大型数据库中检索与给定过滤器查询匹配的前 500 个结果。

目前我正在使用以下(非常低效)的方法..

results = Entries.objects.filter(text__icontains="somequery")[0:500]

但我认为这个查询会将整个数据库加载到内存中,然后截断结果。太慢了。

有没有更优雅的方法来做到这一点?谢谢!

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    这就是这样做的方法。

    生成的 SQL 使用 LIMIT,因此它不会将整个数据库加载到内存中并被 python 切片。

    请注意,您可以使用django.db.connection.queries 查看 SQL django 正在编写的内容 http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running

    但一个鲜为人知的技巧是打印queryset.query 或致电sql = queryset.query.__str__()

    >>> results = Entries.objects.filter(text__icontains="somequery")[0:500]
    >>> print results.query
    SELECT ... FROM ... WHERE ... LIKE ... LIMIT 500
    

    【讨论】:

    • 这正是我想要的。谢谢!
    • 如果数据库中的查询少于 500 条会引发错误吗?
    • @DarKnight python 在列表范围上的行为是不引发任何错误。 QuerySet 复制了这种行为。例如,[][0:1000] 不会引发错误。
    猜你喜欢
    • 2011-08-19
    • 2016-02-03
    • 2017-02-08
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2018-03-01
    相关资源
    最近更新 更多