【Django】QuerySet以及Pickle 序列化在Django中的深度运用详解

本文深入探讨了Django中QuerySet的使用,包括其在不访问数据库时的构建、过滤和切片操作。同时,讨论了Pickle序列化QuerySet在缓存中的应用,强调序列化会将所有结果加载到内存中,可能导致非实时数据。另外,文章还介绍了QuerySet的属性和方法,如有序性、数据库引用、注释和聚合函数等,帮助理解QuerySet的内省和操作。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值