计算机基础知识63

Django的条件查询:查询函数

exclude

exclude:返回不满足条件的数据

res = Author.objects.exclude(pk=1)
print(res)    # <QuerySet [<Author: Author object (2)>, <Author: Author object (3)>]>

order_by

1、按照 id 升序排序

res = Author.objects.all().order_by('id')
print(res)
# <QuerySet [<Author: Author object (1)>, <Author: Author object (2)>, <Author: Author object (3)>]>

2、按照id降序排序

res = Author.objects.all().order_by('-id')
print(res)
#<QuerySet [<Author: Author object (3)>, <Author: Author object (2)>, <Author: Author object (1)>]>

条件查询( 判断条件名/模糊查询/范围查询/比较查询 /日期查询)

条件格式:模型类属性名__条件名=值

表中数据:

# 判断条件名:exact

res = Book.objects.get(id__exact=1)
print(res)  #西游记

# 模糊查询:

   1、包含 contains

res = Book.objects.filter(name__contains='红楼')
print(res)  # <QuerySet [<Book: 红楼梦>]>

   2、以什么开头 starswith

res=AuthorDatail.objects.filter(telephone__startswith='198').values('author__name')
print(res)

   3、以什么结尾 endswith

res=AuthorDatail.objects.filter(telephone__endswith='12').values('author__name')
print(res)

     4、以什么开头,不区别大小写istartswith

res=AuthorDatail.objects.filter(telephone__istartswith='198').values('author__name')
print(res)

     5、以什么结尾,不区别大小写 iendswith

res=AuthorDatail.objects.filter(telephone__iendswith='12').values('author__name')
print(res)

# 空查询: 是否为空 isnull

# 查询书名不为空的图书
res = Book.objects.filter(name__isnull=False)
print(res)   #<QuerySet [<Book: 西游记>, <Book: 红楼梦>, <Book: 三国演义>]>

# 范围查询

   1、或 in

# 年龄在十八或40的,或
res = models.UserInfo.object.filter(ageage__in=[18,40]).all()
print(res)  

   2、之间range

# 年龄在十八到40的,之间
res = models.UserInfo.object.filter(age__range=[18,40]).all()

# 比较查询 gtltgte大于等于、lte小于等于

res = models.UserInfo.object.filter(age_gt=38).all()
age__gt=1---大于
age__lt=1---小于
age__gte=1---大于等于
age__lte=1---小于等于

# 日期查询:year、month、day、week_day、hour、minute、second对日期时间类型

bpub_date = models.DateTimeField(auto_now=True,auto_now_add=True,null=True)
# 查询1980年发表的图书。
list = BookInfo.objects.filter(bpub_date__year=1980)
# 查询1980年1月1日后发表的图书。
list = BookInfo.objects.filter(bpub_date__gt=date(1990,1,1))

F对象

# 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象

# F查询:拿到某个字段在表中具体的值

语法如下:from     django.db.models    import    F

                  f(属性名)

1.查询卖出数大于库存数的书籍:

from django.db.models import F
res = models.Book.objects.filter(maichu__gt=F('kucun'))
print(res)

2、将所有书籍的价格提升500块:

from django.db.models import F
res = models.Book.objects.update(price=F('price') + 500)
print(res)

3、将所有书的名称后面加上 ' 爆款 ' 两个字:

from django.db.models.functions import Concat  #拼接字符串
from django.db.models import Value
res = models.Book.objects.update(title=Concat(F('title'), Value('爆款')))
print(res)
# models.Book.objects.update(title=F('title') + '爆款')  # 所有的名称会全部变成空白
"""在操作字符类型的数据的时候 F不能够直接做到字符串的拼接"""

Q对象

1、多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字

# 查询阅读量大于20,并且编号小于3的图书
list=BookInfo.objects.filter(bread__gt=20,id__lt=3)  
或  
list=BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)

2、如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符

      语法如下: Q(属性名__运算符=值)

# 查询阅读量大于20的图书
from django.db.models mport Q
list = BookInfo.objects.filter(Q(bread__gt=20))

3、Q对象可以使用&、|连接,&表示并且,|表示或

# 查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
from django.db.models mport Q
list = BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))
# 复杂逻辑:(名字为红楼梦并且价格大于100) 或者 id 大于 2
res = Book.objects.filter((Q(name='红楼梦') & Q(price__gt=100))|Q(nid__gt=2))

4、Q对象前可以使用~操作符,表示非not

# 查询编号不等于3的图书
from django.db.models mport Q
list = BookInfo.objects.filter(~Q(pk=3))

5、exclude() 也是取反

# 查询编号不等于3的图书
list = BookInfo.objects.exclude(id=3)
list = BookInfo.objects.exclude(id__exact=3)

聚合查询

aggregate是QuerySet 的一个终止子句,用来做聚合查询

1、聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中

    注意aggregate的返回值是一个字典类型,格式如下:

                 {'属性名__聚合类小写':值}          # {'bread__sum':3}

select name,price,avg('price') as average_price from book; 
Book.objects.aggregate(average_price=Avg('price'))
ret = Book.objects.all().aggregate(avg_price=Avg('price'), min_price=Min('price'))
# 查询图书的总阅读量
from django.db.models import Sum
list = BookInfo.objects.aggregate(Sum('bread'))

2、使用count时一般不使用aggregate()过滤器

        注意count函数,返回值是一个数字

# 查询图书总数。
list = BookInfo.objects.count()

 分组查询

# 分组查询:分组后通常会用聚合,annotate用来分组和聚合的

  annotate:
        filter 在 annotate 前:表示过滤,where条件
        values 在 annotate 前:表示分组的字段,如果不写表示按整个表分组
        filter 在 annotate 后:表示 having条件
        values 在 annotate后:表示取字段---》只能取分组字段和聚合函数字段
# 分组的目的:把有相同特征的分成一组,

   分成一组后:Avg,Count,Max,Min,Sum统计总条数,统计平均数,求最大值

# 统计每一本书作者个数---》
res = Book.objects.all().values('id').annotate(author_num=Count("authors")).values('name','author_num')
# 统计每一个出版社的最便宜的书---》按出版社    
Publish.objects.all().valuse('id').annotate(min_price=Min("book__price")).vlaues('name','min_price')
Publish.objects.annotate(MinPrice=Min("book__price"))
# 查询每一个书籍的名称,以及对应的作者个数-->按书分
Book.objects.all().values('id').annotate(count_publish=Count("authors")).value('name','count_publish')
# 查询每一个以 红开头 书籍的名称,以及对应的作者个数-->按书分
Book.objects.all().filter(name__startswith='红').values('id').annotate(count_publish=Count("authors")).value('name','count_publish')
# 查询每一个以 红开头 书籍的名称,以及对应的作者个数大于3的记录-->按书分
Book.objects.all().filter(name__startswith='红')values('id').annotate(count_publish=Count("authors")).filter(count_publish__gt=3).value('name','count_publish')

今日思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Seata源码学习 】篇六 全局事务提交与回滚

【Seata源码学习 】篇六 全局事务提交与回滚 全局事务提交 TM在RPC远程调用RM后,如果没有出现异常&#xff0c;将向TC发送提交全局事务请求io.seata.tm.api.TransactionalTemplate#execute public Object execute(TransactionalExecutor business) throws Throwable {// 1. …

【离散数学】——期末刷题题库(集合)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【FPGA】Verilog:二进制并行加法器 | 超前进位 | 实现 4 位二进制并行加法器和减法器 | MSI/LSI 运算电路

Ⅰ. 前置知识 0x00 并行加法器和减法器 如果我们要对 4 位加法器和减法器进行关于二进制并行运算功能&#xff0c;可以通过将加法器和减法器以 N 个并行连接的方式&#xff0c;创建一个执行 N 位加法和减法运算的电路。 4 位二进制并行加法器 4 位二进制并行减法器 换…

内存是如何工作的

一、什么是内存 从外观上辨识&#xff0c;它就是内存条&#xff1b;从硬件上讲&#xff0c;它叫RAM&#xff0c;翻译过来叫随机存储器。英文全称&#xff1a;Random Access Memory。它也叫主存&#xff0c;是与CPU直接交换数据的内部存储器。其特点是读写速度快&#xff0c;不…

java开发之个微机器人的实现

简要描述&#xff1a; 二次登录 请求URL&#xff1a; http://域名地址/secondLogin 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wcId…

【每日一题】从二叉搜索树到更大和树

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;中序遍历的反序方法二&#xff1a;后缀数组 写在最后 Tag 【中序遍历】【二叉树】【2023-12-04】 题目来源 1038. 从二叉搜索树到更大和树 题目解读 在二叉搜索树中&#xff0c;将每一个节点的值替换成树中大于等于该…

根文件系统lib库添加与初步测试

一. 简介 我们在编译 busybox源码时&#xff0c;选择的是动态编译&#xff0c;所以&#xff0c;制作生成的 根文件系统中/bin或 /sbin目录下软件运行时会调用到一些库文件的。库文件就是交叉编译器的库文件。 前面我们编译 busybox源码时&#xff0c;选择动态编译&#xff0…

NPS内网穿透教程

1.简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协议&#xff08;访问内网网站、本地支付接口调试、ssh访问、远程桌面&#xff0c;内网dns解析等等……&#xff09;&#xff0c;此外还支持内网ht…

安卓1.0明显是基于linux内核开发的,安卓1.0是不是linux套壳?

安卓1.0明显是基于linux内核开发的&#xff0c;安卓1.0是不是linux套壳&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「安卓开发资料从专业入门到高级教程工具包」&#xff0c;点个关注&…

大数据集群增加数据盘,平衡数据盘HDFS Disk Balancer

大数据集群增加数据盘&#xff0c;平衡数据盘HDFS Disk Balancer 官网&#xff1a;https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/HDFSDiskbalancer.html hdfs diskbalancer -execute /system/diskbalancer/nodename.plan.jsonhdfs diskbalancer -q…

IDEA2023找不到 Allow parallel run

我的idea版本&#xff1a;2023.1.4 第一步&#xff1a;点击Edit Configrations 第二步&#xff1a;点击Modify options 第三步&#xff1a;勾选Allow multiple instances 最后点击Apply应用一下 ok,问题解决&#xff01;

SSM项目实战-登录验证成功并路由到首页面,Vue3+Vite+Axios+Element-Plus技术

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/sysUser.js import request from "../util/request.js";export const login (…

Mysql日志

文章目录 1. 日志类型2. bin log2.1 写入机制2.2 binlog与redolog对比2.3 两阶段提交 3. 中继日志 1. 日志类型 这 6 类日志分别为&#xff1a; 慢查询日志&#xff1a; 记录所有执行时间超过long_query_time的所有查询&#xff0c;方便我们对查询进行优化。 通用查询日志&am…

在sCrypt网站上铭刻Ordinals

sCrypt发布了一个新的Ordinals铭刻工具&#xff0c;连接Panda Wallet后即可使用。你可以观看我们录制的视频教程&#xff0c;获得更多细节。 铭刻工具同时支持BSV主网&#xff08;mainnet&#xff09;和测试网&#xff08;testnet&#xff09;&#xff0c;你可以在我们的官方网…

手写VUE后台管理系统8 - 配置404NotFound路由

设置404页面 配置路由404页面 配置路由 这里配置了两个路由&#xff0c;一个是主页&#xff0c;另外一个则匹配任意路由显示为404页面。因为只配置了两个路由&#xff0c;如果路径没有匹配到主页&#xff0c;则会被自动导向到404页面&#xff0c;这样就可以实现整站统一的404页…

「Linux」使用C语言制作简易Shell

&#x1f4bb;文章目录 &#x1f4c4;前言简易shell实现shell的概念系统环境变量shell的结构定义内建命令完整代码 &#x1f4d3;总结 &#x1f4c4;前言 对于很多学习后端的同学来讲&#xff0c;学习了C语言&#xff0c;发现除了能写出那个经典的“hello world”以外&#xff…

142873-41-4脂质过氧化抑制剂1-星戈瑞

142873-41-4脂质过氧化抑制剂1 英文名称&#xff1a;Lipid peroxidation inhibitor 1 中文名称&#xff1a;脂质过氧化抑制剂 化学名称&#xff1a;2,4,6,7-四甲基-2-[(4-苯基哌啶-1-基)甲基]-3H-1-苯并呋喃-5-胺 CAS&#xff1a;142873-41-4 外观&#xff1a;固体粉末 分…

D2822ML 用于便携式录音机和收音机作音频功率放大器。采用 DIP8 SOP8 封装形式

D2822ML 用于便携式录音机和收音机作音频功率放大器。采用 DIP8 SOP8 封装形式 特点: 电源电压降到 1.8V 时仍能正常工作交越失真小 静态电流小可作桥式或立体声式功放应用外围元件少通道分离度高 开机和关机无冲击噪声软限幅

RT-Thread 内存管理

在计算机系统中&#xff0c;通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机存储器&#xff09;&#xff0c;可以把它理解为电脑…

微信公众号端在线客服系统源码 聊天记录云端实时保存 附带完整的搭建教程

随着社交媒体的普及&#xff0c;越来越多的用户通过微信公众号与企业进行沟通。因此&#xff0c;开发一款基于微信公众号的在线客服系统&#xff0c;可以帮助企业更好地服务用户&#xff0c;提高客户满意度。同时&#xff0c;为了解决聊天记录的存储和管理问题&#xff0c;我们…