django中F表达式和Q函数应用与原理详解
作者:花开花落与云卷云舒
F对象查询与Q对象查询,刚看到大家一定会感到很陌生,其实它们也是 Django 提供的查询方法,而且非常的简单的高效,下面这篇文章主要给大家介绍了关于django中F表达式和Q函数应用与原理的相关资料,需要的朋友可以参考下
一、F表达式
1.1 原理
F表达式是对数据库中某列值进行操作,允许还没有链接到数据的情况下对数据库字段的值进行操作,而不需要获取到对象放在内存中再对字段进行操作,直接执行原sql语句。
在通常情况下,我们在操作数据的时候都是先从数据库中将原数据取出放到内存中,然后再编辑某些属性,最后再提交。
1.2 应用
初始数据库数据
使用F字段直接进行数学运算
from django.db models import F res = models.Bbook.objects.all().update(read_num=F('read_num')+1)
操作之后,数据库中的数据都加5
Django中提供F 表达式, 就是将模型字段的值与同一模型中的另一个字段进行比较。
例如,查询read_num大于等于230的name:
from django.db.models import F Game.objects.filter(bread__gte=F('read_num'))
F()
对象使用常量和其他 F()
对象的加法,减法,乘法,除法,模和幂运算。
F()也可以具体到某一个字段的操作。
将阅读数增加100
Game.objects.update(price=F("read_num") + 100)
二、Q函数
2.1 原理
- Q对象相当于查询时使用 or 语句 ;
- Q对象可以使用 & 和 | 进行组合运算, 当一个操作符用于两个Q对象时,它就会生成一个新的Q对象;
- Q对象可以用 “~” 操作符放在前面表示否定,也可允许否定与不否定形式的组合;
- Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面;
2.2 例子
# 查询价格大于等于70并且标题是“J”开头的书 Book.objects.filter(Q(price__gte=70)&Q(title__startswith="J")) # 查询标题是“J”开头并且id不是3的书 Book.objects.filter(Q(title__startswith="J") & ~Q(id=3)) # Q对象可以与关键字参数查询一起使用,必须把普通关键字查询放到Q对象查询的后面 print(Book.objects.filter(Q(price=70)|Q(title="Python"), publication_date="2017-09-26"))
总结
到此这篇关于django中F表达式和Q函数应用与原理的文章就介绍到这了,更多相关django中F表达式和Q函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!