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 ...
随机推荐
- Itellij idea2019.2 激活码,有效期2020.5
Itellij idea2019.2 激活码,有效期2020.5 MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoi ...
- deepin安装pip
sudo apt install python3-venv python3-pip 升级最新版 pip3 install --upgrade pip 更新完以后就报错网上的解决办法没有好使的 退回版 ...
- 【2018寒假集训 Day2】【动态规划】又上锁妖塔
又上锁妖塔 (tower.in/tower.out) [题目描述] 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑>,可是小A很 ...
- day02_Requests模块
1.anaconda的安装 1.1 .安装可执行程序 1.2 .配置环境变量 根据环境变量的先后顺序去查找可执行程序文件,如果查找到就执行,如果查找不到就报错. anaconda主要配置: ...
- linux磁盘分区三步走
为了便于理解硬盘的物理结构 ,可将硬盘看作一个圆,它是坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等.每个盘有两面,都可记录信息.要了解硬盘的物理结构,需要弄懂磁道.扇区.柱面.簇等几 ...
- 使用最新AndroidStudio编写Android编程权威指南(第3版)中的代码会遇到的一些问题
Android编程权威指南(第3版)这本书是基于Android7.0的,到如今已经过于古老,最新的Android版本已经到10,而这本书的第四版目前还没有正式发售,在最近阅读这本书时,我发现这本书的部 ...
- rsync通过服务同步、Linux系统日志、screen工具 使用介绍
第8周5月15日任务 课程内容: 10.32/10.33 rsync通过服务同步10.34 linux系统日志10.35 screen工具 扩展1. Linux日志文件总管logrotate http ...
- 混淆矩阵-MATLAB代码详解
一.混淆矩阵 (一).简介 在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵.在图像精度评价中,主要用于比较分类结果和实际测得值, ...
- ViewGroup dispatchTouchEvent方法中 mFirstTouchTarget标志是否为空的含义
在ViewGroup dispatchTouchEvent方法中首次出现mFirstTouchTarget的语句为: if (actionMasked == MotionEvent.ACTION_DO ...
- nginx代理跨域,根据路径参数改变目标服务器地址
我们都知道nginx是可以做跨域代理的: location ^~ /visited-path/ { proxy_pass http://another-domain/; } 举个例子:假如我们的代理服 ...