当前位置: 首页 > news >正文

计算机基础知识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对象

语法如下: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))

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()过滤器调用聚合函数

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

# 查询图书的总阅读量
from django.db.models import Sum
list = BookInfo.objects.aggregate(Sum('bread'))

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

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

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

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

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

今日思维导图:

http://www.lryc.cn/news/250656.html

相关文章:

  • springboot虚拟请求——测试
  • 计算机视觉各个方向概述
  • AIGC: 关于ChatGPT中API接口调用相关准备工作
  • 【Java Web学习笔记】 1 - HTML入门
  • 基于windows系统使用Python对于pc当前的所有窗口的相关操作接口
  • 30秒搞定一个属于你的问答机器人,快速抓取网站内容
  • JPA数据源Oracle异常记录
  • 抽奖送平板是骗局!!!
  • json.decoder.JSONDecodeError: Extra data: line 1 column 332 (char 331)
  • rust持续学习 COW
  • 【计算机网络】14、DHCP
  • 【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现
  • IDEA常用快捷键
  • 【2024秋招】2023-10-17 金山云文档服务端二面
  • 一种excel多线程并发写sheet的方案
  • 深入了解接口测试:揭秘网络分层和数据处理!
  • Java并发编程
  • vue+echarts实现依赖关系无向网络拓扑结图节点折叠展开策略
  • Unity3d 灯光阴影开启,法线贴图出现BUG
  • c语言:模拟实现atoi函数
  • Docker 使用心得
  • Nacos 架构原理
  • 尝试修改vim光标的思路
  • SpringBoot整合Activiti7——消息事件(十)
  • 高翔:《自动驾驶与机器人中的SLAM技术 》-Slam_in_autonomous_driving 编译过程中遇到的问题
  • org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 实现密码加密 验证 代码示例
  • 《微信小程序开发从入门到实战》学习三十八
  • 云服务器哪家便宜?亚马逊AWS等免费云服务器推荐
  • Linux删除了大文件为什么磁盘空间没有释放?
  • 编写bat脚本执行msyql建库sql