【问题标题】:Queryset is evaluated when sliced?切片时评估查询集?
【发布时间】:2017-04-03 01:27:06
【问题描述】:

在 django queryset doc(https://docs.djangoproject.com/en/1.10/ref/models/querysets/) 中,它说“在内部,可以构造、过滤、sliced 的 QuerySet,并且通常在没有实际命中的情况下传递数据库。在您执行某些操作来评估查询集之前,实际上不会发生数据库活动。”然后,它说“您可以通过以下方式评估 QuerySet:Iteration / Slicing / ...” .

所以,我的问题是“切片时是否评估 Queryset”。

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    完整的段落解释了切片何时评估查询集,何时不评估(强调我的):

    • 切片。正如限制 QuerySets 中所解释的,可以使用 Python 的数组切片语法对 QuerySet 进行切片。对未计算的 QuerySet 进行切片通常会返回另一个未计算的 QuerySet,但如果您使用切片语法的“step”参数,Django 会执行数据库查询,并返回一个列表。对已评估的 QuerySet 进行切片也会返回一个列表。

    Django 只会在您使用 step 参数时评估查询集,例如queryset[::2],因为这不能转换为 SQL 查询。在其他情况下,对未评估的查询集进行切片将返回另一个未评估的查询集,并且 Django 将在查询中添加LIMIT 和/或OFFSET

    【讨论】:

    • 非常感谢。它让我困惑了很长时间。 >
    猜你喜欢
    • 2019-10-12
    • 2020-10-31
    • 1970-01-01
    • 2011-07-18
    • 2010-11-23
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多