前言
django框架支持多种方法查询数据库,不同的方法返回的结果也不太一样,本篇详细介绍一下关于查询常用的13个方法。
返回对象是对象列表的:all(),filter(),exclude(),order_by(),reverse(),values_list(),distinct()
返回结果是对象的:get(),frist(),last()
返回结果是布尔值:exists()
返回结果是数字:count()
数据库查询准备
在上User表中添加测试数据
可迭代对象queryset
django里面查询数据库不需要写sql语句 表的类名称.objects.all()返回的是整个表的内容,这里返回的是可迭代对象queryset,并没有直接返回全部数据,如果想取出数据,需要用到for循环读取。
urls.py设置select_all 访问路径
打开浏览器:ip+8000/select_all
进行访问,返回如下结果
筛选条件filter()
查询的时候添加条件,类似sql里的where语句
select * from ke24_user where user_name =‘liushui‘ ;
filter 查询的结果是可迭代对象,如果结果只有一个,可以通过下表取值,找不到值可以给个默认值null。
testdb.py文件创建select_filter方法
urls.py创建访问路径
终端命令行启动django服务
python manage.py runserver 0.0.0.0:8000
浏览器输入:ip:8080/select_filter/ ,得到的邮箱:
可迭代的字典序列values()
all()和filter()返回的都是可迭代的queryset序列,平常我们习惯获取字典的对象,可以用values()方法获取User.objects.all().values("user_name"
,"mail")类似于sql语句
select user_name,mail from ke24_user;
在urls.py配置访问地址 url(r‘^select_values$‘, testdb.select_values),访问后得到的结果
查询到的信息:{‘user_name‘: ‘liushui‘, ‘psw‘: ‘123456‘}{‘user_name‘: ‘liushui0‘, ‘psw‘: ‘12345‘}{‘user_name‘: ‘liushui1‘, ‘psw‘: ‘123‘}{‘user_name‘: ‘liushui11‘, ‘psw‘: ‘123456‘}
其它可迭代对象
exclude()它包含了与所给筛选条件不匹配的对象,调用者:objects管理器 返回queryset
查找用户名不是liushui的数据库:
res=User.objects.exclude(user_name=‘liushui‘)
order_by()是对查询结果排序,由queryset对象调用,返回值是queryset
查询所有的数据按照mail字段排序,默认升序
res=User.objects.all().order_by(‘mail‘)
查询所有的数据按照mail字段排序,前面加个-代表降序
res=User.objects.all().order_by(‘-mail‘)
reverse()对结果进行反向排序,由queryset对象调用,返回值是queryset
查询所有的数据按照mail字段排序,默认升序,查询结果反向排序,和-mail实现效果一样
res=User.objects.all().order_by(‘mail‘).revrse()
values_list()由queryset对象调用,返回值是queryset的一个元组序列
res=User.objects.all().values_list("user_name","mail")
distinct()从返回的结果提出重复记录,由queryset对象调用,返回值是queryset
和sql语句中的distinct去重一样
res=User.objects.all().values("user_name","mail").distinct()
get()返回单个对象
django中的get是从数据库获取唯一匹配的结果。查询结果有且只有一个才执行,查询结果多个或者一个都会报错。
查询到的结果
frist和last
返回第一条记录和返回最后一条记录
查询第一个结果:123456@163.com
查询最后结果:897564
exists()和count()
exists() 如果QuerySet包含数据,就返回True,否则返回False 由queryset对象调用 返回值布尔值
exists: 由queryset对象调用 返回值布尔值
is_exist=User.objects.all().exists()
count : 数数 由queryset对象调用 返回int
ret=User.objects.all().count()