django基础之day05,F与Q查询,Q查询的高级用法
#F与Q查询
#*************************** F 查询 ********************
# F 查询数据库中的其他字段!!!
#1.查询库存数大于卖出数的书籍
from django.db.models import F
res=models.Books.objects.filter(kucun__gt=F('maichu')).values('title')
print(res)
#结果:<QuerySet [{'title': '西游记2'}]>
#2.将所有书的价格上涨100块
from django.db.models import F
res=models.Books.objects.all().update(price=F('price')+100)
print(res)
#结果,价格在原来的基础上都增加了100块
#3.将所有书的名称后面全部加上“爆款”后缀,了解知识点
# 操作字符串数据需要借助于concat方法
from django.db.models.functions import Concat
from django.db.models import F
from django.db.models import Value
res=models.Books.objects.update(title=Concat(F('title'),Value('新款')))
print(res)
#结果:书的名字上都加上了后缀
#4.按照表中的字段分组
res=models.Publish.objects.values('想要分组的字段名').annotate(min_price=Min('book__price'))
print(res)
#*************************** Q 查询 ********************
from django.db.models import Q
# Q 查询中 | 管道符就是代表或者的关系
# Q 查询中 ~ 波浪线就是代表not的关系
#1.查询一下书籍名称是张三丰或者库存数是500的书
res=models.Books.objects.filter(Q(title='张三丰')|Q(kucun=500))
print(res)
#结果:<QuerySet [<Books: 张三丰>, <Books: 吝啬鬼>]>
res = models.Books.objects.filter(~Q(title='张三丰') | Q(kucun=500))
print(res)
#结果:<QuerySet [<Books: 吝啬鬼>, <Books: 西游记>, <Books: 西游记2>]>
#*************** Q 对象高级用法,通过字符串就能查询出数据 **************
from django.db.models import Q
#查询书籍名称是张三丰或者库存数量大于500的书籍
q=Q()
q.connector='or' #默认是and,此处修改为了 or
q.children.append(('title','张三丰'))
q.children.append(('kucun__gt',500))
res=models.Books.objects.filter(q)
print(res)
#结果:<QuerySet [<Books: 张三丰>, <Books: 西游记>, <Books: 西游记2>]>
#SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`kucun`, `app01_books`.`maichu` FROM `app01_books` WHERE (`app01_books`.`title` = '张三丰' or `app01_books`.`kucun` > 500) LIMIT 21; args=('张三丰', 500)
查询书籍名称不是张三丰或者库存数量小于500的书籍
q = Q()
q.connector = 'or' # 默认是and,此处修改为了 or
q.children.append(('title', '张三丰'))
q.children.append(('kucun__gt', 500))
res = models.Books.objects.filter(~q) #取反
print(res)
#结果:<QuerySet [<Books: 吝啬鬼>]>
#SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`kucun`, `app01_books`.`maichu` FROM `app01_books` WHERE NOT ((`app01_books`.`title` = '张三丰' or `app01_books`.`kucun` > 500)) LIMIT 21; args=('张三丰', 500)
django基础之day05,F与Q查询,Q查询的高级用法的更多相关文章
- django基础之day05,orm字段参数,自定义需要的字段,orm中的事务操作
orm字段和参数 charfield varchar integerfield int bigintegerfield bigint emailfield varchar(254) datefield ...
- Django 聚合查询 分组查询 F与Q查询
一.聚合查询 需要导入模块:from django.db.models import Max, Min, Sum, Count, Avg 关键语法:aggregate(聚合结果别名 = 聚合函数(参数 ...
- SolrNet高级用法(分页、Facet查询、任意分组)
前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...
- Django基础(5) ----基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- Django first()和last() F查询以及Q查询
一.first()和last() 分别返回queryset的第一项与最后一项,具体用法如下: p = Blog.objects.order_by('title').first() 等同于: try: ...
- django系列5.5--分组查询,聚合查询,F查询,Q查询,脚本中调用django环境
一.聚合查询 aggregate(*args, **args) 先引入需要的包,再使用聚合查询 #计算所有图书的平均价格 from django.db.models import Avg Book.o ...
- django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066
1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...
- Django ORM (四) annotate,F,Q 查询
annotate 可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合. from django.shortcuts import re ...
随机推荐
- 01-MongoDB数据库基础
一.MongoDB数据库基础 1.MongoDB数据库介绍 什么是MongoDB? MongoDB是非关系型数据库中的一种,是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情 ...
- PostGIS 安装教程(Linux)(二)
##接上篇,上篇讲述了Postgresql的安装,此篇介绍postgis的安装 ##附上上篇链接:https://www.cnblogs.com/giser-s/p/11195419.html 二.安 ...
- python3 之 内置函数range()
一.语法: range(stop) range(start,stop,step) start:计数从start开始,默认是从0开始.eg:range(5)等价于range(0,5) stop:计数到s ...
- 学习Python第一天:找了4本专属小白的书籍(前期入门打基础)
我们提供一个初学者最好的Python书籍列表.Python是一个初级程序员可以学习编程的最友好语言之一.为了帮助您开始使用Python编程,我们分享此列表.泡一杯茶,选一本书阅读,开始使用Python ...
- 公众号在线Markdown编辑器,支持公式
公众号排版不支持Markdown,用自带的富文本编辑器排版出来的格式十分丑陋,尤其是公式,竟然连"Mathjax"都不支持,但好在支持"带格式复制",也即可以将 ...
- React Native从零开始构建项目(2019)
环境搭建,参考官网 https://reactnative.cn/ 安装 Xcode Android Studio 目的,实现本地热重载开发,使用vsCode 运行失败,重新执行react-nativ ...
- 磁盘格式化、磁盘挂载、手动增加swap空间 使用介绍
第4周第2次课(4月10日) 课程内容: 4.5/4.6 磁盘格式化4.7/4.8 磁盘挂载4.9 手动增加swap空间 4.5/4.6 磁盘格式化 [root@jimmylinux-002 ~]# ...
- VMware中linux虚拟机的安装
打开安装的VMware 15,点击新建虚拟机 2.选择典型即可,点击下一步 3.选择“稍后安装操作系统”,点击下一步 4.选择想安的版本,点击下一步 5.设置虚拟机名称及安装位置(路径必须全英文!) ...
- 获取JVM转储文件的Java工具类
在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法.这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获 ...
- luogu P2272 [ZJOI2007]最大半连通子图
题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若 ...