Python数据库查询之组合条件查询-F&Q查询
F查询(取字段的值)
关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能的双下划线,但是如果有这样一个需求,查询a表中的aa字段数值大于a表中bb字段数值,应该怎么做呢,Django提供一个F表达式来支持这种操作
首先应该导入模块:
from django.db.models import F
a.objects.filter(aa__gt=F('bb'))
再举一个简单的例子,修改表中的值,为每一个a表中的price字段的值,加20
a.objects.all().update(price=F('price')+20)
如果没有F 对象,这种需求是无法实现的
Django支持对F()对象进行加、减、乘、除、取模、幂计算等操作
F()括号中还支持双下划线进行连表查询,F()返回的结果不一定是数字,也可以是字符串,比如,a和b是两张表
from django.db.models import F
a.objects.filter(name=F('b__name'))
Q查询,相比F查询,Q组合查询应用十分广泛,甚至你的查询只需要一个filter和Q,就够了
需导入
from django.db.models import Q
本来filter( ) 方法中的关键字,都是按‘与’的关系进行查找的,如果你需要 ‘或’ 的关系,你就得用Q了
Q对象用于封装一组关键字参数,这些关键字参数就可以作为filter()的参数
重点是Q对象可以使用 | 或者 & 连接成一个新的Q对象,还支持用 ~ 符号取反
需要注意:Q对象可以和其他关键字参数一起作为filter的参数,但是Q对象必须放在一个位置
示例:查询a表中id大于4,以‘张’开头,或者价格大于10000的数据
a.objects.filter((Q(name__startwith='张'),Q(id__gt=4))|Q(price__gt=10000))
延伸:
因为filter接收的参数是关键字参数,所以在实际项目应用中,我们可以单独处理这个关键字参数,比如写成一个字典dict,然后filter(**dict) 就可以应用我们写在字典中的参数了
如果是Q对象,就不用**了
用Q对象做字典的元素时,如果是‘或’的关系,需要这样写
con = Q()
con.connector = 'OR'
key = ......
val = ....... con.children.append((key,val)) dict = {‘key2’:‘val2’} data_list = a.objects.filter(**dict).filter(con) # 这句话表明了filter后面可以跟的参数,一个是字典,另一种就是Q 对象
Python数据库查询之组合条件查询-F&Q查询的更多相关文章
- python-day71--django多表双下划线查询及分组聚合及F/Q查询
#====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查 ...
- 模型层字段-多表查询-神奇的双下划线查询-F,Q查询
Django ORM中常用的字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. In ...
- Django ORM (四) annotate,F,Q 查询
annotate 可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合. from django.shortcuts import re ...
- Django框架08 /聚合查询、分组、F/Q查询、原生sql相关
Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...
- Django day08 多表操作 (五) 聚合,分组查询 和 F,Q查询
一:聚合,分组查询 二:F, Q查询
- 分组\聚合\F\Q查询
一.分组和聚合查询 1.aggregate(*args,**kwargs) 聚合函数 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每一个参数都指定一个包含在字典中的 ...
- 聚合查询、分组查询、F&Q查询
一.聚合查询和分组查询 1.aggregate(*args, **kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每个参数都指定一个包含在字典中的返回值 ...
- orm中的聚合函数,分组,F/Q查询,字段类,事务
目录 一.聚合函数 1. 基础语法 2. Max Min Sum Avg Count用法 (1) Max()/Min() (2)Avg() (3)Count() (4)聚合函数联用 二.分组查询 1. ...
- $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
一.聚合函数 from django.db.models import Avg,Sum,Max,Min,Count,F,Q #导入 # .查询图书的总价,平均价,最大价,最小价 ...
随机推荐
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'zhongfucheng.user' does
编写第一个Hibernate程序的时候,就发现出现了错误 Exception in thread "main" org.hibernate.exception.SQLGrammar ...
- Hibernate注解配置与XML配置区别
注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-p ...
- Linux服务器硬盘状态查看
首先执行fdisk -l最底下 Device Start End Sectors Size Type /dev/vda1 2048 6143 4096 2M BIOS boot /dev/vda2 6 ...
- 二叉树终极教程--BinarySearchTree
BinarySearchTreeMap 的 实现 public interface Map<K extends Comparable<K>, V> { void put(K k ...
- 手机管家iPhoneX的适配总结
WeTest 导读 随着苹果发布会的结束,Xcode的GM版也上线了,也意味着iPhoneX适配之旅的开始. 一.设计关注篇 注意设计的基本原则:(苹果呼吁的) 规格原帖:https://develo ...
- ResourceManager的HA
大家都知道在hadoop2中对HDFS的改进很大,实现了NameNode的HA:也增加了ResourceManager.但是ResourceManager也可以实现HA.你没看错,确实是Resourc ...
- css预处理语言--让你的css编写更加简单方便
CSS预处理语言之一-------LESS Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 可以运行在 Nod ...
- 在web中使用HTTPS
背景 目前网上流行的是HTTP协议,HTTPS协议还在逐步推广的过程中. HTTP协议以明文发送内容,容易被攻击者窃听.HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份[ ...
- java 线程一
java基础学习总结--线程(一) 一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个. ...
- stdafx.h 的作用
stdafx.h VC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错. stdafx的英文全称为:Standard Application Framewo ...