查询API
(1) all() :查询所有结果 调用者:objects管理器 返回queryset
ret=Book.objects.all() print(ret) # <QuerySet [<Book: GO>, <Book: linux>, <Book: 北京折叠>, <Book: 三体>, <Book: 追风筝的人>, <Book: 乱世佳人>]
(2) filter() : 它包含了与所给筛选条件相匹配的对象 调用者:objects管理器 返回queryset
# filter 方法:返回值queryset ret=Book.objects.filter(title="linux",price=111) print(ret) # <QuerySet [<Book: linux>]>
(3) get方法(): 返回与所给筛选条件相匹配的对象,返回结果有且只有一 调用者:objects管理器 返回查询到model对象 (注意:查询结果有且只有一个才执行)
# get方法:返回查询到model对象 ret=Book.objects.get(price=111) ret=Book.objects.get(title="linux") print(ret.title) # linux
(4) first(),last()方法: 返回第一条记录和返回最后一条记录 调用者:queryset 返回model对象
# first() last()方法:queryset调用 返回model对象 fbook=Book.objects.all()[0] fbook=Book.objects.all().first() lbook=Book.objects.all().last()
(5) exclude(): 它包含了与所给筛选条件不匹配的对象 调用者:objects管理器 返回queryset
#exclude:返回值一个queryset ret=Book.objects.exclude(price=111) print(ret)
(6) order_by(): 对查询结果排序 由queryset对象调用,返回值是queryset
# order_by:排序 由queryset对象调用,返回值是queryset ret=Book.objects.all().order_by("-price","-nid").first() print(ret)
(7) count : 数数 由queryset对象调用 返回int
# count :数数 :由queryset对象调用 返回int ret=Book.objects.all().count() print(ret)
(8) reverse(): 对查询结果反向排序 由queryset对象调用,返回值是queryset
# reverse():由queryset对象调用,返回值是queryset Book.objects.all().order_by("price").reverse()
(9) exists(): 如果QuerySet包含数据,就返回
True
,否则返回
False
由queryset对象调用 返回值布尔值
# exists: 由queryset对象调用 返回值布尔值 is_exist=Book.objects.all().exists() if is_exist: print("OK")
(10)values()方法: 由queryset对象调用,返回值是queryset 一个可迭代的字典序列
# values方法:由queryset对象调用,返回值是queryset ret=Book.objects.all().values("title","price") # queryset [{"title":"linux"},{"title":"python"},...] print(ret) # <QuerySet [{'title': 'GO'}, {'title': 'linux'}, {'title': '北京折叠'}, {'title': '三体'}, {'title': '追风筝的人'}, {'title': '乱世佳人'}]> ''' ret=[] for obj in Book.objects.all(): temp={ "title":obj.title "price":obj.price } ret.append(temp) '''
(11)values_list():由queryset对象调用,返回值是queryset 一个元组序列
# values_list:由queryset对象调用,返回值是queryset ret=Book.objects.all().values_list("title","price") print(ret) # <QuerySet [('GO',), ('linux',), ('北京折叠',), ('三体',), ('追风筝的人',), ('乱世佳人',)]>
(12)distinct(): 从返回结果中剔除重复纪录 由queryset对象调用,返回值是queryset
#distinct: 由queryset对象调用,返回值是queryset ret=Book.objects.all().values("title").distinct() print(ret)
基于双下划线的模糊查询
in是三者之中的任意一个 Book.objects.filter(price__in=[100,200,300]) gt是大于 Book.objects.filter(price__gt=100) it是小于 Book.objects.filter(price__lt=100) range是在这个数之间 Book.objects.filter(price__range=[100,200]) contains是只要包含在其中 Book.objects.filter(title__contains="python") icontains是不区分大小写只要包含在其中 Book.objects.filter(title__icontains="python") startswith是以"py"开头的 Book.objects.filter(title__startswith="py") 时间 Book.objects.filter(pub_date__year=2012)
#查询价格大于200的书籍 ret=Book.objects.filter(price__gte=200) print(ret) # 查询书籍名称以py开头的所有的书籍名称 ret=Book.objects.filter(title__istartswith="py").values("title") ret=Book.objects.filter(title__contains="p").values("title") print(ret) # <QuerySet [{'title': 'pycharm'}, {'title': 'python'}]> # 查询2017年7月份的所有的书籍 ret=Book.objects.filter(pub_date__year=2017,pub_date__month=7) print(ret)