Django中manger/QuerySet类与mysql数据库的查询
Django中的单表操作
1.精确查询
#查询的结果返回是容器Query Set的函数(Query Set模型类)
# 1. all() 查询的所有的符合条件的结果,支持正向索引,支持索引切片,不支持反向索引
user_list = User.objects.all()
print(type(user_list))
print(user_list)
print(user_list.query)
user = User.objects.all()[0] # [User: ming]
user1 = User.objects.all()[-1] # 不支持AssertionError: Negative indexing is not supported.
user2 = User.objects.all()[0:2] # <QuerySet [<User: [User: ming]>, <User: [User: xian]>]>
# 2. exclude(**kwargs) 查询满足条件对应额对立面的所有结果的list
user3 = User.objects.exclude(id=2)
# 该函数相当于将满足条件的记录剔除后返回其他所有记录。
# 3. order_by(*field) 查询按照指定的字段条件进行排序后的结果, 'tag_name'代表正序,'-tag_name'代表反序。
user4 = User.objects.order_by('id')
print(user4)
# Query Set 是一个储存查询记录的容器,具备列表的一些操作接口,可以被迭代
for i in user4:
print(i)
# 4. reverse() 反转查询结果
user5 = User.objects.all().reverse()
# 将查询结果反转
# 5. count() 显示查询结果的记录的条数,也就是Query Set容器中数据的条数
n = User.objects.all().reverse().count()
print(n)
# 6. exists() 判断查询结果是否存在,值为布尔类型
res = User.objects.filter(id=7).exists()
print(res)
False
(0.000) SELECT (1) AS `a` FROM `app_user` WHERE `app_user`.`id` = 7 LIMIT 1; args=(7,)
# 7. values(*field) 按照指定的字段们进行查询,返回存放包含字段们的字典的QuerySet
user = User.objects.values('name', 'age')
print(user)
#对应的sql: SELECT `app_user`.`name`, `app_user`.`age` FROM `app_user` LIMIT 21; args=()
<QuerySet [{'name': 'ming', 'age': 25}, {'name': 'xian', 'age': 26}, {'name': 'daidai', 'age': 58}, {'name': 'jeans', 'age': 23}, {'name': 'tenny', 'age': 26}]>
# 8 values_list(*field) 同values类似,但是返回的记录是以元组存放在Query Set中
user = User.objects.values_list('name', 'age')
print(user)
<QuerySet [('ming', 25), ('xian', 26), ('daidai', 58), ('jeans', 23), ('tenny', 26)]>
(0.000) SELECT `app_user`.`name`, `app_user`.`age` FROM `app_user` LIMIT 21; args=()
# 9 distinct(*field) 将其他的查询结果剔除重复的字段,括号内是字段名
user = User.objects.values('name', 'age').distinct('name')
2.用manger类实现的增删查改
# 增
user = User.objects.create(name='xiaojin', age=24, birthday='2018-12-12')
print(type(user))
print(user)
# <class 'app.models.User'>
# [User: xiaojin]
user = User(name='Zero', age=8, birthday='2010-06-01')
user.save()
# 查
# 操作的结果拥有是一个list
users = User.objects.filter(name='Owen')
# 只能操作有且只有一条数据的记录
user = User.objects.get(id=1)
#改
User.objects.filter(name='Owen').update(name='Owen_best')
users = User.objects.filter(name='Owen_best')
for user in users:
user.name = 'Owen'
user.save()
#删
User.objects.filter(name='Owen').delete()
user = User.objects.filter(name='Zero').first()
user.delete()
3.模糊查询
user_list = User.objects.filter(id__gte=1)
# 整型相关
age__exact=8 # 确切匹配8
age__in=[8, 10] # 8或10
age__gt=8 # 大于8
age__gte=8 # 大于等于8
age__lt=8 # 小于8
age__lte=8 # 小于等于8
age__range=[8, 10] # 8到10之间
age__isnull=0|1 # 0:is not null | 1:is null
# 字符串相关
name__startswith # 后方模糊匹配
name__endswith # 前方模糊匹配
name__contains # 前后方均模糊匹配
name__regex # 正则匹配
name__istartswith # 不区分大小写后方模糊匹配(i开头就是不区分大小写)
# 时间相关
birthday__year=2008 # 时间年份模糊匹配
4.特殊字查询(F、Q查询)
# 特殊字的查询首先要导入django中的模型类中的F,Q
from django.db.models import F,Q
# F查询(计算查询,基于计算的)
# 需求一:将所有人的年龄加1
User.objects.all().update(age=F('age')+1)
# 需求二:将所有年龄的1/4等于id的记录查询出来
res = User.objects.filter(id=F('age')/4).exists()
# Q查询
# Q基于关系 Q('字段条件')
# 与
User.objects.filter(Q(id=1) & Q(age=10)) # id=1 并且 age=10
# 或
User.objects.filter(Q(id=1) | Q(id=2)) # id=1 或 id=2
# 非
User.objects.filter(~Q(id=1)) # id 不为 1
Django中manger/QuerySet类与mysql数据库的查询的更多相关文章
- 在django中使用orm来操作MySQL数据库的建表,增删改
多张表之间的三种关系:一对一,一对多,多对多 创建表 一对一 xx = models.OneToOneField(to='表明',to_field='字段名',on_delete=models.CAS ...
- Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)
Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...
- jmeter中通过jdbc方式连接mysql数据库的配置参考
jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...
- Mysql数据库使用量查询及授权
Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...
- MySQL数据库的查询缓冲机制
MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...
- MySql数据库慢查询
一.什么是数据库慢查询? 数据库慢查询,就是查询时间超过了我们设定的时间的语句. 可以查看设定的时间: 默认的设定时间是10秒.也可以自己根据实际项目设定. set long_query_time=0 ...
- DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户
1. DAO简介 DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解 DAO设计模式包括5个重要的部分,分别为数据 ...
- Ecplise 中 加载JDBC 连接 Mysql 数据库读取数据
准备工作 首先下载 JDBC 驱动,下载地址https://www.mysql.com/products/connector/ 将压缩包解压得到文件 mysql-connector-java-5.1. ...
- 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合
在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...
随机推荐
- 记NOIP2018
day0 中午在机房水了一波出发,坐了一下午的车,5点到了大门对面的红旗宾馆.南山中学的和我们住在一个宾馆里面,Z教练似乎同他们关系很好,见面还打招呼. 红旗宾馆附近特别偏僻,出门就是修路的工地,后面 ...
- Docker系列(一)CentOS 6.5 离线安装、不升级内核
本特安装教程特点 1.由于是离线下载,需要提前下载好需要的依赖包 2.使用的版本为Centos6.5 3.不升级内核 4.提供异常解决方案. 安装过程 一.下载依赖包(使用能联网的节点) 依赖包可以自 ...
- day01代码
1. 使用while循环打印1,2,3,4,5,7,8,9 # 使用while循环打印1,2,3,4,5,7,8,9 count = 0 while count < 10: count += 1 ...
- k8s之Hello World(四)
实例:Guestbook留言板系统将通过Pod.RC.Service等资源对象搭建完成,成功启动后在网页中显示一条“Hello World”留言.其系统架构是一个基于PHP+Redis的分布式Web应 ...
- 一般处理程序获取get,post数据
ashx具体代码: public class GuanWangWC : IHttpHandler { public void ProcessRequest(HttpContext context) { ...
- 本文讲述下windows下使用rsync备份数据
本文讲述下windows下使用rsync备份数据 需要使用的软件如下: 环境需求: 上海monitor上跑有定时任务计划备份线上数据库,现在需要把上海monitor上的备份数据拉回到179.12数据回 ...
- APS技术中的多目标规划问题
在进行APS(高级计划与排程)系统开发时,绝大多数情况下是需要考虑多目标的.但面对多目标问题进行规划求解时,我们往往极容易因处理方法不当,而影响输出结果,令结果与用户期望产生较大差别.事实上很多时候用 ...
- go语言学习--go中godep的使用小结
go中的godep 本文参考:http://www.cnblogs.com/me115/p/5528463.html#h20 http://studygolang.com/articles/4385 ...
- 2018秋寒假作业6—PTA编程总结3
1.实验代码 7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T) ...
- GVIM 设置 vimrc
set expandtab set nobackup set nosmartindent set noautoindent set ruler au BufRead,BufNewFile *.sv s ...