django框架学习:十三.数据库查询表结构

前言

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()

原文地址:https://www.cnblogs.com/liushui0306/p/12617948.html