计算机基础知识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.mfbz.cn/a/215947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android启动系列之进程杀手--lmkd

本文概要 这是Android系统启动的第三篇文章&#xff0c;本文以自述的方式来讲解lmkd进程&#xff0c;通过本文您将了解到lmkd进程在安卓系统中存在的意义&#xff0c;以及它是如何杀进程的。&#xff08;文中的代码是基于android13&#xff09; 我是谁 init&#xff1a;“大…

LeetCode 232.用栈实现队列

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回…

c题目14:写成一个函数,对数组进行排序

每日小语 一个人倘若需要从思想中得到快乐&#xff0c;那么他的第一个欲望就是学习。——王小波 自己思考 这不前几天刚搞的东西吗&#xff0c;就写成一个函数&#xff0c;这个有什么难的吗&#xff1f;我有时候那个分别心特重啊&#xff0c;真就别人拿到个啥好的比杀了我还难…

贸易公司ERP用什么软件好

不同行业的贸易公司有不同的业务结构和管理模式&#xff0c;日常经营管理过程中遇到的难点呈现多样化&#xff0c;而很多贸易公司在仓库、财务、销售、采购、订单、客户等业务一体化和部门协同效率等方面还有很多提升空间。 有些贸易公司涉及多仓库、多门店、多税制、多汇率、…

VUE2+THREE.JS 设定巡航行动轨迹

设定巡航行动轨迹 引入three.path初始化坐标点animate 执行行动轨迹动画参考博客 我们写3D时&#xff0c;常常会有按照一定轨迹去浏览模型&#xff0c; 所以,我们要先确认行动轨迹&#xff0c;渲染出行动轨迹以后&#xff0c;再让人物按照行动轨迹去移动 引入three.path cnpm …

性价比开放式蓝牙耳机推荐哪款、性价比最高的开放式耳机

传统的耳机设计虽然便携&#xff0c;但却可能给一些需要长时间佩戴的用户带来不适。长时间封闭在耳机内可能导致耳朵不透气&#xff0c;甚至引起疼痛。这就是为什么近年来开放式耳机越来越受欢迎的原因。这种耳机设计无需直接插入耳道&#xff0c;采用挂耳的佩戴方式&#xff0…

广州数字孪生赋能工业制造,加速推进制造业数字化转型

广州数字孪生赋能工业制造&#xff0c;加速推进制造业数字化转型。数字孪生系统基于历史数据、实时数据&#xff0c;采用人工智能、大数据分析等新一代信息技术对物理实体的组成、特征、功能和性能进行数字化定义和建模。通过构建在信息世界对物理实体的等价映射&#xff0c;对…

React 笔记 jsx

严格约定&#xff1a;React 组件必须以大写字母开头&#xff0c;而 HTML 标签则必须是小写字母。 React JSX JSX 是由 React 推广的 JavaScript 语法扩展。 用于表达组件的 特殊语法的 js 函数 要求标签必须闭合&#xff1b;返回的组件必须包裹在一个父标签内&#xff1b; …

【Linux】echo命令使用

​echo命令 功能是在显示器上显示一段文字&#xff0c;一般起到一个提示的作用。此外&#xff0c;也可以直接在文件中写入要写的内容。也可以用于脚本编程时显示某一个变量的值&#xff0c;或者直接输出指定的字符串。 ​ 著者 由布莱恩福克斯和切特拉米撰写。 语法 echo […

UOS打印任务监控

UOS系统下如何对一个打印任务进行监控呢? 首先,UOS系统是支持这个功能。比如说我们打印一个任务后,UOS自带的打印管理器是能知道打印任务的状态的: 经过研究,最终发现了他的监控原理。 还得是DBus 没错,还是得通过DBus来实现打印任务监控。 话不多说,直接上代码: …

Linux 文件查找

1 文件查找 在文件系统上查找符合条件的文件 文件查找&#xff1a;locate&#xff0c;find 1.1 locate 工作特点&#xff1a; 格式&#xff1a; Usage: locate [OPTION]... [PATTERN]...常用选项&#xff1a; -i &#xff1a;不区分大小写的搜索 -n N &#xff1a;只列举前…

Linux下Redis安装及配置

首先下载redis安装包&#xff1a;地址 这里我使用的是7.0版本的&#xff01; 将文件上传至linux上&#xff0c;此处不再多叙述&#xff0c;不会操作的&#xff0c;建议使用ftp&#xff01; 第一步&#xff1a;解压压缩包 tar -zxvf redis-7.0.14.tar.gz第二步&#xff1a;移…

代码随想录第二十三天(一刷C语言)|组合总数组合总数II分割回文串

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、组合总数 思路&#xff1a;参考carl文档 定义两个全局变量&#xff0c;二维数组result存放结果集&#xff0c;数组path存放符合条件的结果。&#xff08;这两个变量可以作为函数参数传入…

使用SD-WAN新方式,解锁分公司访问总部私有云

某企业是一家跨地区运营的大型企业&#xff0c;总部位于上海&#xff0c;拥有多个分公司遍布全国。其中北京分公司作为该企业在北方地区的重要分支机构&#xff0c;负责着该地区的市场开拓和业务发展。 为了实现分公司与总部之间的有效沟通和信息共享&#xff0c;北京分公司使用…

特征点 -- 《视觉SLAM十四讲 从理论到实践(第2版)》

什么是特征点&#xff1f; 特征点就是图像中一些特别的地方&#xff0c;例如图像中的角点&#xff0c;在不同图像之间的辨识度更强&#xff0c;一种直观的提取特征的方式就是在不同图像之间辨认角点&#xff0c;确定它们的对应关系。 OpenCV中已经有了很多实用的特征提取和匹配…

安科瑞参加全国建筑电气设计技术协作及情报交流网2023年会-安科瑞 蒋静

2023年11月19日~20日&#xff0c;广州市东方宾馆内人潮涌动&#xff0c;热闹非凡&#xff0c;全国建筑电气设计技术协作及情报交流网2023年年会暨“建筑电气传承与创新”高峰论坛在此盛大举办。 会议由全国建筑电气设计技术协作及情报交流网、中国建筑东北设计研究院有限公司主…

云原生之深入解析如何限制Kubernetes集群中文件描述符与线程数量

一、背景 linux 中为了防止进程恶意使用资源&#xff0c;系统使用 ulimit 来限制进程的资源使用情况&#xff08;包括文件描述符&#xff0c;线程数&#xff0c;内存大小等&#xff09;。同样地在容器化场景中&#xff0c;需要限制其系统资源的使用量。ulimit: docker 默认支持…

超详细的性能测试实战教程

之前有在自己建的测试群直播分享了一些性能测试的基础内容&#xff0c;当时有人说希望有个实战的分享&#xff0c;想了想某些东西属于公司机密不方便直接直播分享&#xff0c; 这里就拿最近我做的一个性能测试实例来举例子说说&#xff0c;理解为主。。。 先看看一个完美的性…

双击热备方案实现(全)

双击热备是应用与服务器的一种解决方案&#xff0c;其构造思想是主机和从机通过TCP/IP网络连接&#xff0c;正常情况下主机处于工作状态&#xff0c;从机处于监视状态&#xff0c;一旦从机发现主机异常&#xff0c;从机将会在很短的时间内代替主机。完全实现主机的功能。 要想实…

SQL Server 数据库,创建数据表

2.3表的基本概念 表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似&#xff0c;都是 按行和列的格式组织的&#xff0c;每行代表一条唯一的记录&#xff0c;每列代表记录中的一个字段.例如&#xff0c;在包含公 司员工信息的表中&#xff0c;每行…
最新文章