前提(初始表)
查询集
Django查询数据库的13个方法
返回结果是对象列表:all(),filter(),exclude(),order_by(),reverse(),values(),values_list(),distinct()
返回结果是对象:get(),first(),last()
返回结果是布尔值:exists()
返回结果是数字:count()
django_study.app01.views.py:新建一个select_db视图函数
from django.shortcuts import render # 导入显示页面的模块
from django.http import HttpResponse # 导入显示字符串的模块
from .models import * # 导入操作的模型类
# Create your views here.
def select_db(request):
return HttpResponse("查询成功")
django_study.django_study.urls:绑定url与视图函数
url(r'^select_db/$', select_db)
all()
获取所有数据,相当于sql中的*,select * from user;
def select_db(request):
res = User.objects.all()
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个数据:%s</p>
<p>第一个数据的name属性值:%s</p>
"""%(res[0], res[0].name))
启动状态运行后查看
filter()
筛选满足条件的数据,相当于sql中的where,select * from user where "age"=25;
def select_db(request):
# 筛选出age=25的数据
res = User.objects.filter(age=25)
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个数据:%s</p>
<p>第一个数据的name属性值:%s</p>
<p>第二个数据的name属性值:%s</p>
"""%(res[0], res[0].name, res[1].name))
启动状态运行后查看
exclude()
获取不满足条件的数据,与filter相反
def select_db(request):
# 筛选出age=25以外的数据
res = User.objects.exclude(age=25)
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个数据:%s</p>
<p>第一个数据的name属性值:%s</p>
<p>第二个数据的name属性值:%s</p>
"""%(res[0], res[0].name, res[1].name))
启动状态运行后查看
order_by()
对查询结果排序(默认升序)
def select_db(request):
# 按年龄排序(升序)
res = User.objects.all().order_by("age")
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个数据:%s</p>
<p>第一个数据的name为:%s,age为:%s</p>
"""%(res[0], res[0].name, res[0].age))
启动状态运行后查看
降序显示,只需要-age即可
def select_db(request):
# 按年龄排序(降序)
res = User.objects.all().order_by("-age")
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个数据:%s</p>
<p>第一个数据的name为:%s,age为:%s</p>
"""%(res[0], res[0].name, res[0].age))
启动状态运行后查看
reverse()
倒叙显示
def select_db(request):
# 按年龄升序后,倒序显示,相当于-age
res = User.objects.all().order_by("age").reverse()
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个数据:%s</p>
<p>第一个数据的name为:%s,age为:%s</p>
"""%(res[0], res[0].name, res[0].age))
启动状态运行后查看
values()
返回一个字典数据
values("name","age")相当于sql:select name, age from user;
def select_db(request):
# res为一个字典元素的列表,values后面的表示只需显示name和age字段
res = User.objects.all().values("name", "age")
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个元素:%s</p>
<p>通过下标取第二个元素:%s</p>
"""%(res[0], res[1]))
启动状态运行后查看
如果需要显示所有字段,values()里面不加参数即可,默认显示所有
def select_db(request):
# res为一个字典元素的列表,values后无参数,代表显示所有字段
res = User.objects.all().values()
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个元素:%s</p>
<p>通过下标取第二个元素:%s</p>
"""%(res[0], res[1]))
启动状态运行后查看
values_list()
跟values()差不多,只不过它是返回的数据是元组格式
def select_db(request):
# res为一个元组的列表,values后无参数,代表显示所有字段
res = User.objects.all().values_list()
print(res)
"""
返回的res是一个可迭代对象,可通过下标取某个元素(对象)
"""
return HttpResponse("""
<p>通过下标取第一个元素:%s</p>
<p>通过下标取第二个元素:%s</p>
"""%(res[0], res[1]))
启动状态运行后查看
distinct()
从返回结果中去重
def select_db(request):
"""
1.用age_list来存放区重后的age列表
2.values/values_list和distinct混合使用没有先后顺序
2.如果想用distinct的话,在distinct前面需要加上values或values_list
原理:相当于values获得了一个列表然后set()或values_list获得了一个数组然后set()
"""
age_list = []
res = User.objects.all().values("age").distinct()
for i in res:
age_list.append(i)
return HttpResponse("去重后的age列表为:%s"%age_list)
启动状态运行后查看
get()
返回单个满足条件的对象,如果未找到会引发“模型类.DoesNotExist”异常;如果多条被返回,会引发“模型类.MultipleObjectsReturned”异常
def select_db(request):
res = User.objects.get(name="wang")
return HttpResponse("""
<p>获取对象的age为:%s</p>
<p>获取对象的sex为:%s</p>
"""%(res.age, res.sex))
启动状态运行后查看
first()/last()
def select_db(request):
# 筛选出sex="女"的数据后分别取第一条/最后一条
first_data = User.objects.filter(sex="女").first()
last_data = User.objects.filter(sex="女").last()
return HttpResponse("""
<p>获取第一个对象的name为:%s</p>
<p>获取第一个对象的age为:%s</p>
<p>获取最后一个对象的name为:%s</p>
<p>获取最后一个对象的age为:%s</p>
"""%(first_data.name, first_data.age, last_data.name, last_data.age))
启动状态运行后查看
exists()
如果存在返回True,不存在返回False
def select_db(request):
res = User.objects.filter(name="suner").exists()
res1 = User.objects.filter(name="sun").exists()
return HttpResponse("""
<p>res:%s</p>
<p>res1:%s</p>
"""%(res, res1))
启动状态运行后查看
count()
返回当前查询的总条数
def select_db(request):
res = User.objects.filter(sex="男").count()
return HttpResponse("查询总条数为:%s"%res)
启动状态运行后查看