django的Queryset

Queryset的一些注意点

下面以user为models中的一个数据模型

1.可以进行切片操作

user.objects.all()[0:5]
user.objects.all().filter(conditions)[0:2]

2.可以进行迭代

for a in user.objects.all():
print(a.username)
print(a.password)
print(a.user_phone)

3.是惰性查询的

result = user.objects.all()这个时候其实并不会真正的执行SQL语句,只有真正用到的时候才回去执行,比如print(result[0])

4.缓存机制

进行缓存能够减轻数据库的负担,但是对你的内存会有影响,试想如果查询集里面有几十万条数据,一下子全部放到内存中是不是裂开,但是这样我们就不用进行很多次查询了是不是?所以这里面还有很多的学问,比如查询的优化,缓存与查询的权衡。
我们可以result=user.objects.all().filter(conditions)来保存查询结果集,这样就可以避免频繁的执行sql语句,注意:print([u.username for u in user.objects.all()],print([u.password for u in user.objects.all()]),这样的话会进行两次查询并且不会保存结果,血亏
为此我们可以result=user.objects.all(),print([u.username for u in result]),这样就不会进行多余的查询

5.exists和iterator

有时候我们只需要判断查询结果中是否有数据而不需要将数据放入内存中,这时exists就派上用场了if user.objects.all().exists()
iterator,如果数据量非常大的话,我们不想数据一次性装入内存吧,这样内存会裂开,我们可以这样==result=user.objects.all().iterator()==这样的话如果我们for u in result:
print(u.username)就会一次取出一个数据,用完就清除,有点类似与生成器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值