Django与数据库操作方法
数据库信息
[外链图片转存失败(img-PUbpN1Ln-1562936707240)(…/图片夹/146.png)]
all()方法:返回一个 Queryset 对象,通过遍历可以将值取出。
from app import models
from django.http import HttpResponse
def test(request):
# all() 返回一个 Queryset 对象,通过遍历可以将值取出。
person_lst = models.App.objects.all()
print(person_lst)
#输出:< QuerySet[ < App: < obj: name:张三 >>, < App: < obj: name:李 四 >>,< App: < obj: name:王五 >>] >
# 遍历取值
print(person_lst[0].name) #张三
return HttpResponse('查出来了!')
filter()方法:过滤,返回一个 Queryset 对象,
from django.http import HttpResponse
def test(request):
# filter():过滤,返回一个 Queryset 对象,
person_lst = models.App.objects.filter(age=12)
print(person_lst)
#< QuerySet[ < App: < obj: name:李四 >>, < App: < obj: name:王五 >>] >
# select * from app where age=12 and name="李四" ↓
person_lst = models.App.objects.filter(age=12,name="李四") #默认and连接
print(person_lst)
# < QuerySet[ < App: < obj: name:李四 >>] >
# 不存在 ,返回为空
person_lst = models.App.objects.filter(age=23)
print(person_lst) # < QuerySet[ ] >
print(person_lst.name)
# 返回相同条件中的第一个,具体的对象
person_lst = models.App.objects.filter(age=12).first()
print(person_lst) # < obj: name:李四 >
# 返回相同条件中的最后一个,具体的对象
person_lst = models.App.objects.filter(age=12).last()
print(person_lst) # < obj: name:李四 >
# 如果过滤一个不存在的first 与 遍历列表的区别
person_lst = models.App.objects.filter(age=10).first()
print(person_lst) #None
# 都是取第一个值first返回None ,遍历是报错
person_lst = models.App.objects.filter(age=10)
print(person_lst[0]) # list index out of range
return HttpResponse('查出来了!')
get()方法:只能查询唯一的一个,返回的是一个具体的对象
from django.http import HttpResponse
def test(request):
# ③ get() : 只能查询唯一的一个,返回的是一个具体的对象
person_lst = models.App.objects.get(name="张三")
print(person_lst) # <obj: name:张三>
print(person_lst.name) # 遍历取值
# # 由于只返回唯一的一个,(age=12有2个)所以报错
# person_lst = models.App.objects.get(age=12)
# print(person_lst)
# print(person_lst.name)
# 不存在 ,报错
# person_lst = models.App.objects.get(age=23)
# print(person_lst)
# print(person_lst.name)
return HttpResponse('查出来了!')
————————————————————————————————————————————————————————————————————————————----
# 不确定会不会报错,为了防止程序报错可以使有以下2种方法
# ⑴
if person_lst: #如果不为空
person_lst = models.App.objects.get(age=23)
else: # 如果为空
person_lst = models.App.objects.filter(age=23)
# ⑵
try: # 尝试,如果错误,走except。
person_lst = models.App.objects.get(age=23)
except:
person_lst = models.App.objects.filter(age=23)
exclude()方法:返回与筛选条件不匹配的对象
from django.http import HttpResponse
def test(request):
# exclude() :返回与筛选条件不匹配的对象
person_lst = models.App.objects.exclude(age=11)
print(person_lst)
# < QuerySet[ < App: < obj: name:李四 >>, < App: < obj: name:王五 >>] >
return HttpResponse('查出来了!')
values()方法: 返回一个QuerySet对象,对象中包含的是字典的形式
from django.http import HttpResponse
def test(request):
# ⑤ values():返回一个QuerySet对象,对象中包含的是字典的形式
person_lst = models.App.objects.filter(age=12).values()
print(person_lst)
#< QuerySet[{'name': '李四', 'age': 12, 'id': 2, 'birthday':datetime.date(2019, 7, 27)},# {'name': '王五', 'age': 12, 'id': 3,'birthday':datetime.date(2019, 28)}] >
person_lst = models.App.objects.filter(age=12).values('name')
print(person_lst)# <QuerySet [{'name': '李四'}, {'name': '王五'}]>
return HttpResponse('查出来了!')
values_list():与values()相似,返回的是一个元祖序列
from django.http import HttpResponse
def test(request):
# ⑥values_list():与values()相似,返回的是一个元祖序列
person_lst = models.App.objects.filter(age=12).values_list('name')
print(person_lst) #<QuerySet [('李四',), ('王五',)]>
return HttpResponse('查出来了!')
order_by():对查询结果排序,默认升序, - 降序
from django.http import HttpResponse
def test(request):
# ⑦ order_by():对查询结果排序,默认升序,- 降序
person_lst = models.App.objects.all().order_by('age')
print(person_lst)
#< QuerySet[ < App: < obj: name:张三 >>, < App: < obj: name:李四 >>,
# < App: < obj: name:王五 >>] >
person_lst = models.App.objects.all().order_by('-age')
print(person_lst)
# < QuerySet[ < App: , < App: < obj: name:李四 >>, < App: < obj: name:王五 >>,
# < obj: name:张三 >>] >
return HttpResponse('查出来了!')
reverse():对查询结果进行反向排序
from django.http import HttpResponse
def test(request):
# ⑧ reverse():对查询结果进行反向排序
person_lst = models.App.objects.all().order_by('age').reverse()
print(person_lst)
# < QuerySet[ < App: < obj: name:李四 >>, < App: < obj: name:王五 >>,
# < App: < obj: name:张三 >>] >
return HttpResponse('查出来了!')
count():返回数据库中匹配查询(Queryset)的对象数量
from django.http import HttpResponse
def test(request):
# ⑨ count():返回数据库中匹配查询(Queryset)的对象数量
person_lst = models.App.objects.all().count()
print(person_lst) #3
return HttpResponse('查出来了!')
exitsts(): 如果Queryset包含数据,返回True,否则返回Flase
from django.http import HttpResponse
def test(request):
# ⑩ exitsts(): 如果Queryset包含数据,返回True,否则返回Flase
person_lst = models.App.objects.exists()
print(person_lst) #True
return HttpResponse('查出来了!')
总结:
1.返回具体对象方法get()、first()、last()
2.返回QuerySet对象方法
all()、filter()、exclude()、order_by()、reverse()、
values() 返回一个可迭代的字典序列。
values_list() 返回一个可迭代的元祖序列。
3.返回Boolean值方法 exists()
4.返回数字的方法count()