Django QuerySet 使用技巧总结

QuerySet是Django的查询集,可以通过QuerySet条件查询得到对应模型的对象集合。

queryset 相当于sql 中的select语句

基本查询方法:all, filter, get, exclude.

  • all() : 获取某张表的所有记录;
  • filter(**kwargs) :  返回一个根据参数查询到的queryset;
  • exclude(**kwargs): 和filter正好相反,返回除了根据参数查到的结果的其他值;

以上三种查询方法获得的结果,类型是一个结果集,相当于Python中列表,所以支持切片(不支持负数)、排序、获取长度等方法,

如all()[1:10],all().order_by(**kwargs),filter().len(),exclude().count()

  • get(**kwargs): 返回一个根据参数查询到的唯一值,不再是列表类型。查询值不存在的话会报错DoesNotExist;

支持链式查询,如filter().filter().exclude().get(),

还可后接distinct(),表示去重;也可以接delete(),表示删除;update(),表示更新;explain(),表示执行该条语句所用时间

以上查询方法中的条件参数,可以用修饰符拓展,修饰符是两个下划线加修饰词

Django的数据库API支持20多种查询类型,下面介绍一些常用的:

  1. excat:  默认类型,相当于不写
  2. iexact:  不区分大小写
  3. contains/icontains:  表示包含,后者不区分大小写
  4. startwith/istartwith:   自己猜
  5. endwith/iendwith:  再猜
  6. gt/gte:  大于/不小于
  7. lt/lte:  小于/不大于
  8. in:  后面跟一个列表,表示是否是列表中的一个元素
  9. year/month/date:   时间查询
  10. range:  范围查询
  11. F表达式,比较两个一个模型的两个字段。如filter(comment1__gt=F(comment2)),表示找出comment1大于comment2的对象。
  12. Q函数,表示逻辑或or。如Artical.objects.filter(Q(comment1__icontains='django')|Q(comment2__icontains='python')),相当于Artical.objects.filter(comment1__icontains='django')|Artical.objects.filter(comment1__icontains='python')

 

QuerySet有两个特性:惰性和自带缓存

惰性:单纯的定义queryset不会执行数据库操作,只有对它做进一步运算,例如打印、查询数量、是否存在等操作时才会执行。

自带缓存:当第一遍查询完结果后,会自动将结果缓存到queryset自带的cache中,第二次重新用此queryset将会直接使用此缓存结果,而不会再去操作数据库,减少与数据库的交互。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

young_kp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值