首页
python
Win桌面应用自动化pywinauto
pywinauto遍历展示程序的所有菜单项
Python3使用串口
Python字符串处理
Python3实现配置文件差异对比(键值对key=value的形式)
正则
正则匹配两个字符之间的字符串
正则提取markdown中图片链接
正则表达式基本知识
字符串-正则实例
Python生成8位随机字符串的一些方法
python3批量ping检测
python3检测一批主机ip的tcp端口
Python3--DNS
3D人体骨架检测(mediapipe)
Python-网络
检测到win电脑断网就发出告警声音
Python编写的DNS服务可靠性测试程序
Python编写的TCP/UDP端口探测程序
Python抓包-Pyshark
并发扫描TCP、UDP端口
Python-DHCP
端口的问题以及绑定端口(Python)
VSCode编辑器
python远程开机工具
Pyhton3--Win注册表
开源IT运维项目
python知识点
Python开源运维项目集合
python3备份交换机配置
Python3使用snmp获取H3C交换机arp表
Python检测tcp端口状态并发送到企微群
Python3使用smtp发邮件
Python3使用smtp发邮件(带附件)
Python3拉取微软AD域所有用户信息
Python3使用微软AD域账号认证
自动更新公网域名的解析(阿里云)
每日定时推送Excel中排班表信息到企微群
Django
Django模板标签
Django在发送POST请求时返回403错误
Django-mysql数据库条件查询
uwsgi 配置 python virtualenv 虚拟环境目录 ( ini 配置)
常用收藏
python3数据类型转换
python处理文本
txt每行一个字符串_用英文逗号连接
txt_匹配并拆分出需要字符串
python获取日期时间
python执行linux命令的三种方式
python使用ssh连接到linux服务器执行命令
本文档由 内网文摘 发布,转载请注明出处
-
+
首页
Django-mysql数据库条件查询
### 概念 #### 查询集 查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。 filter():返回满足条件的数据。 exclude():返回满足条件之外的数据。 order_by():对结果进行排序。 对查询集可以再次调用过滤器进行过滤,如 ``` BookInfo.objects.filter(bread__gt=30).order_by(‘bpub_date’) 也就意味着查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。 从SQL的角度讲,查询集与select语句等价,过滤器像where、limit、order by子句。 判断某一个查询集中是否有数据: exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。 ``` #### 惰性执行 创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用 例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集qs qs = BookInfo.objects.all() 继续执行遍历迭代操作后,才真正的进行了数据库的查询 for book in qs: #### 缓存 使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。 ### 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。 `注意:不支持负数索引。` 对查询集进行切片后返回一个新的查询集,不会立即执行查询 ``` 示例:获取第1、2项,运行查看。 qs = BookInfo.objects.all()[0:2] ``` ### 条件查询 #### 一、get函数(仅能返回一条数据) `book = BookInfo.objects.get(id = 1)` #可以且仅可以返回一条数据。 没有数据或返回多条数据都会抛模型类.DoesNotExist异常。 #### 二、all函数 (查询所有) `books = BookInfo.objects.all()` # 查询所有。 返回QuerySet查询集(可以遍历) #### 三、filter函数 (条件查询) filter 条件查询。(可以通过逗号,连接多个条件) 返回QuerySet查询集(可以遍历),不存在返回空。 ```python books = BookInfo.objects.filter(title__exact = '天龙八部') # __exact 等于。 __exact 可以省略。 (__iexact 不区分大小写) books = BookInfo.objects.filter(title__contains = '天') # __contains 包含。模糊查询。 (__icontains 不区分大小写) books = BookInfo.objects.filter(title__endswith = '部') # __endswith 以..结尾。 __startswith 以..开头。 (__iendswith 不区分大小写) books = BookInfo.objects.filter(title__isnull = False) # __isnull 是否为空。 True:表示为null。 False表示not null。 books = BookInfo.objects.filter(id__in = [1,3,5]) # __in 范围查询。 books = BookInfo.objects.filter(id__gt = 3) # __gt 大于。 __lt 小于。 __gte 大于等于。 __lte 小于等于。 books = BookInfo.objects.filter(pub_date__gt = date(1980,1,1)) # 日期查询。 books = BookInfo.objects.filter(pub_date__year = 1980) # 日期查询。(year、month、day、week_day、hour、minute、second) ``` #### 四、exclude函数 (filter函数取反) 查询id不为3的所有图书。 `books = BookInfo.objects.exclude(id = 3)` # 与filter函数作用相反。 返回QuerySet查询集(可以遍历) #### 五、order_by函数 (排序) 对查询结果进行排序。 返回QuerySet查询集(可以遍历) `books = BookInfo.objects.all().order_by('-id')` # 'id'表示升序; '-id'表示降序。 `books = BookInfo.objects.order_by('-id')` # .all()可以省略。 默认查询所有。 可以结合filter等函数一起使用 。 ### F对象和Q对象 ``` F对象用于对象之间属性的比较 F(属性名) ``` ``` Q对象用于对象之间逻辑关系处理, Q(属性名__运算符=值) , 多个过滤器逐个调用表示逻辑与关系, 同sql语句中where部分的and关键字。 Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。 Q对象前可以使用~操作符,表示非not。 ``` ```python # F对象:查询时字段之间的比较 from django.db.models import F, Sum # 查询阅读量大于评论量的图书 books = BookInfo.objects.filter(bread__gt=F("bcomment")) # 查询阅读量大于2倍评论量的图书(可以在F对象上使用算数运算) books = BookInfo.objects.filter(bread__gt=F("bcomment")*2) # Q对象,用于多个条件之间逻辑判断 且& 或| 非~ from django.db.models import Q # Q对象,查询阅读量大于20,并且编号小于3的图书 books = BookInfo.objects.filter(bread__gt=20, id__lt=3) books = BookInfo.objects.filter(Q(bread__gt=20) & Q(id__lt=3)) # 查询阅读量大于20,或编号小于3的图书 books = BookInfo.objects.filter(Q(bread__gt=20) | Q(id__lt=3)) # 查询编号不等于3的图书 books = BookInfo.objects.filter(~Q(id=3)) ``` ### 聚合函数 Sum Count Avg Max Min ``` 使用aggregate()过滤器调用聚合函数。 聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。 注意:aggregate的返回值是一个字典类型,格式如下 {‘属性名__聚合类小写’:值} 如:{‘bread__sum’:3} ``` ```python # 聚合函数 Count Sum Avg Max Min 聚合函数需要和aggregate函数配合使用 from django.db.models import Count, Sum, Avg, Max, Min # 查询图书的总阅读量 books = BookInfo.objects.aggregate(Sum('bread')) # {'bread__sum': 136} # 查询图书总数(使用count时一般不使用aggregate()过滤器, 注意count函数的返回值是一个数字) books = BookInfo.objects.count() books = BookInfo.objects.aggregate(Count('id')) # {'id__count': 5} # 排序 使用order_by对结果进行排序 # 对所有图书按照阅读量从小到大排序 > 升序 books = BookInfo.objects.order_by('bread') # 对所有图书按照阅读量从大到小排序 > 降序 books = BookInfo.objects.order_by('-bread') ``` ### 更新数据 修改和删除 #### 修改更新有两种方法 save update save ``` 修改模型类对象的属性,然后执行save()方法 hero = HeroInfo.objects.get(hname=‘猪八戒’) hero.hname = ‘猪悟能’ hero.save() ``` update ``` 使用模型类.objects.filter().update(),会返回受影响的行数 HeroInfo.objects.filter(hname=‘沙悟净’).update(hname=‘沙僧’) ``` #### 删除 1.模型类对象delete ``` hero = HeroInfo.objects.get(id=13) hero.delete() ``` 2.模型类.objects.filter().delete() ``` HeroInfo.objects.filter(id=14).delete() ``` ```python # 更新数据 # 每次只能更新一条数据 heros = HeroInfo.objects.get(id=19) heros.hname = '猪悟能' heros.save() # 返回更新的行数,可以进行多行同时更新 heros = HeroInfo.objects.filter(hname="沙悟净").update(hname="沙僧") print(heros) # 删除 heros = HeroInfo.objects.get(id=13) heros.delete() HeroInfo.objects.filter(id=15).delete() ``` 链接: https://blog.csdn.net/zui0302/article/details/84798872 https://blog.csdn.net/houyanhua1/article/details/84944010
local
2021年9月6日 14:46
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 LocalNetwork
LocalNetwork
是由mrdoc开源
LocalNetwork.cn
修改的在线文档系统,作为个人和小型团队的云笔记、文档和知识库管理工具。
如果此文档给你或你的团队带来了帮助,欢迎支持作者持续投入精力更新和维护!内网文摘 & LocalNetwork
>>>主页
logo
logo
下载Markdown文件
分享
链接
类型
密码
更新密码