QuerySet
QuerySet本身可以在不访问数据库的情况下构造、过滤、切片或复制和分配。只需要在需要从数据库检索数据或将数据保存到数据库时访问数据库。
可以通过以下方式执行QuerySet:迭代。
for e in Entry.objects.all():
print(e.headline)
QuerySet是迭代的。当第一次迭代它时,它将执行其数据库查询。例如,这将打印数据库中所有条目的标题。
async for e in Entry.objects.all():
results.append(e)
部分如限制QuerySet条目数量中所述,可以使用Python的数组切片语法对QuerySet进行切片。切片未执行的QuerySet通常会返回另一个未执行的Query Set。但是,如果使用切片语法的step参数,Django将执行数据库查询并返回一个列表。对执行的QuerySet进行切片也会返回一个列表。
还要注意,即使对未执行的QuerySet进行切片并返回另一个未执行的Query Set,也不允许对其进行进一步修改(例如,添加更多筛选器或修改排序),因为它无法很好地转换为SQL,也没有明确的含义。
entry_list = list(Entry.objects.all())
Pickle序列化/缓存。有关拾取QuerySet的详细信息,请参阅下一节。在本节中,从数据库中读取结果非常重要。
repr()调用repr()时,将执行QuerySet