Django Model 11.Q查询和F查询

models还是之前的学生Student4、班级Clazz1

Q查询-增强版与或非

多条件

之前讲过多条件筛选,用逗号,也可以用双过滤器.filter .filter
但是只能进行与的操作

Movie.objects.filter(mname__icontains='H',mid=7497)
Movie.objects.filter(mname__icontains='H').filter(mid=7497)

Q的与或非

Q查询是多条件的增强版,可以表示&与,|或,~非
以及多个的组合,比如非与
showsql还是上次那个封装查看sql的方法

from stu.models import *
from django.db.models import Q,F
Student4.objects.filter(Q(sname='lisi')&Q(score=99))
def showsql():
	from django.db import connection
	print(connection.queries[-1]['sql'])
showsql()
Student4.objects.filter(sname='lisi',score=99)
Student4.objects.filter(Q(sname='lisi')|Q(score=99))
Student4.objects.filter(~Q(sname='wangwu'))
Student4.objects.filter(~Q(sname='zhangsan',score=88))

F查询-选择原数据一列

如果要把id=3的score+10分
原生sql语句:

update stu_student4 set score=score+10 where id=3

之前学过django更新有两种方式,save全部更新效率慢,所以用update

Student4.objects.filter(id=3).update(score=F('score')+10)

返回值是1,可以查表格,的确增加了10

这里F查询的功能,就是用来选择更新之前表格的一列数据,即sql里的第二个score:
score=score+10

注意筛选用filter,返回Queryset不会报错
之前讲过不要用get,它返回的是对象,没有update属性

Q的范围更新

如果要把学号大于3的成绩都加10分,需要加上范围

大于gt、大于等于gte、小于lt

范围值用于update的时候,需要在前面加上Q

Student4.objects.filter(Q(id__gt=3)).update(score=F('score')+10)

返回2,表示两个数据受到影响了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值