#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查询的高级用法的更多相关文章

  1. django基础之day05,orm字段参数,自定义需要的字段,orm中的事务操作

    orm字段和参数 charfield varchar integerfield int bigintegerfield bigint emailfield varchar(254) datefield ...

  2. Django 聚合查询 分组查询 F与Q查询

    一.聚合查询 需要导入模块:from django.db.models import Max, Min, Sum, Count, Avg 关键语法:aggregate(聚合结果别名 = 聚合函数(参数 ...

  3. SolrNet高级用法(分页、Facet查询、任意分组)

    前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...

  4. Django基础(5) ----基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询

    一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...

  5. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

  6. Django first()和last() F查询以及Q查询

    一.first()和last() 分别返回queryset的第一项与最后一项,具体用法如下: p = Blog.objects.order_by('title').first() 等同于: try: ...

  7. django系列5.5--分组查询,聚合查询,F查询,Q查询,脚本中调用django环境

    一.聚合查询 aggregate(*args, **args) 先引入需要的包,再使用聚合查询 #计算所有图书的平均价格 from django.db.models import Avg Book.o ...

  8. django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066

    1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...

  9. Django ORM (四) annotate,F,Q 查询

    annotate 可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合. from django.shortcuts import re ...

随机推荐

  1. ubuntu server 1604 关机和重启

    命令有很多,记住以下两三个就够了 重启: sudo reboot (这个短,易记) sudo shutdown -r now  统一的shutdown形式 关机:sudo shutdown -P no ...

  2. mac中安装Jenkins+jdk

    Jenkins是基于Java开发的一种持续集成工具,用于持续的软件版本发布/测试项目,并监控外部调用执行的工作.简单来说就是自动化测试+部署. 首先我们需要安装jdk,注意,目前jenkins只支持j ...

  3. java8 Optional优雅非空判断

    java8 Optional优雅非空判断 import java.util.ArrayList;import java.util.List;import java.util.Optional; pub ...

  4. linux终端操作

    ------------恢复内容开始------------ tab键自动补全 ls列出当前文件目录: 默认是当前目录 “.”代表当前目录 “..”代表父目录 -a显示所有,而隐藏文件的第一字符为点“ ...

  5. 5. 彤哥说netty系列之Java NIO核心组件之Channel

    你好,我是彤哥,本篇是netty系列的第五篇. 简介 上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一--Channel. 思维转变 首先, ...

  6. Linux错误:Unable to locate package解决

    新买一个用于机器学习的实例,镜像系统Ubuntu.想安装一个上传.下载的包. 使用命令: sudo apt-get install lrzsz 结果一直报错: 解决方法: 使用命令: sudo apt ...

  7. Kotlin实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果)

    随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Kotlin在各类编程语言中的排名比较靠后(据TIOBE发布了 19 年 8 月份的编程语言排行榜,Kot ...

  8. easywechat微信开发SDK之小微商户进件(一)

    微信本身不提供小微商户进件的SDK,偶然发现easywechat这么个东西,官网地址是https://www.easywechat.com/  整合了微信开发中常用的接口,包括微信公众号相关接口,微信 ...

  9. 版本控制神器——git的基本使用

    git基础命令 安装git windows的话,直接下载安装即可 Linux Ubuntu安装,apt-get install git Linux Centos安装,yum install git 配 ...

  10. 堆模板(STL版)

    题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...