Django框架F查询与Q查询(全面了解)

一:F与Q查询
1.F查询的作用
能够帮助你直接获取到列表中某个字段对应的数据

注意:
在操作字符串类型的数据的时候, F不能够直接做到字符串的拼接
2.查询卖出书大于库存数的书籍
# 导入F查询
from django.db.models import F

# F 将书籍 库存字段对应的值 依序取出 并进行比较
res = models.Book.objects.filter(maichu__gt=F('kucun'))
print(res)
3.将所有书籍的价格提升500块
# F 将书籍 价格字段对应的值 依序 加500元
models.Book.objects.update(price=F('price') + 500)
4.将所有书的名称后面加上爆款两个字
注意:
在操作字符类型的数据的时候 F不能够直接做到字符串的拼接

# 修改或拼接字符串数据 需要导入以下两个模块
from django.db.models.functions import Concat
from django.db.models import Value

# F 将书籍内的 title字段尾部 依序 加上 爆款 拼接字符串
models.Book.objects.update(title=Concat(F('title'), Value('爆款')))

models.Book.objects.update(title=F('title') + '爆款')  # 错误 所有的名称会全部变成空白

image

二:Q查询
1.Q查询的作用
filter()等方法中的关键字参数查询都是一起进行"and",如果你需要执行更复杂的查询(列如ORM语句),你可以使用Q对象。
2..查询卖出数0大于100或者价格小于60的书籍
# 导入Q模块
from django.db.models import Q

# Q包裹逗号分割 还是adn关系
res = models.Book.objects.filter(Q(maichu__gt=100), Q(price__lt=600))
# | or关系
res = models.Book.objects.filter(Q(maichu__gt=100)|Q(price__lt=600))
# ~ not关系
res = models.Book.objects.filter(~Q(maichu__gt=100)|Q(price__lt=600))
# print(res)
3.Q的高阶用法
  • 能够将查询条件的左边也变成字符串的形式 而 不是变量形式
# 先产生一个空对象  实列化
q = Q()
q.connector = 'or'  # and修改成or
# q对象里面有一个children
q.children.append(('maichu__gt', 100))
# 第一个元素就会被当作查询条件的左边 第二个元素会被当作查询条件右边
q.children.append(('price__lt', 600))
res = models.Book.objects.filter(q)  # filter 除了可以放条件 还可以放对象
print(res)  # 默认还是and关系

image

4.Q高阶用法
1.可以在去对象内 children里面 无限制的添加元素 添加元组,两个元素。
2.而且还支持修改 or and not
3.默认是and
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值