from django.shortcuts import render from django.http import HttpResponse, Http404 from django.urls import reverse from . import models from django.db.models import Q def inquire(request): # 查询所有的数据,返回一个数据集合对象(查询集) all_data = models.Stu.objects.all() print(all_data, all_data[0].stu_name) # 过滤查询,按条件筛选数据 filter_data = models.Stu.objects.filter(id='10') print(filter_data, filter_data[0].stu_name, filter_data.values()) all_filter_data = models.Stu.objects.all().filter(id='10') print(all_filter_data, all_filter_data[0].stu_name) # 排除查询,排除符合条件的数据 exclude_data = models.Stu.objects.exclude(id='10') print(exclude_data, exclude_data[0].stu_name) # 按指定字段进行排序,带负号代表降序 order_data = models.Stu.objects.all().order_by('-id').values('id') print(order_data) # 将查询集对象序列化为字典类型 value_data = models.Stu.objects.all().values() print(value_data) # # 返回单个满足条件的对象, 未查到数据或查到多跳数据都会报错,用于主键查询 get_data = models.Stu.objects.all().get(id='13') print(get_data, get_data.stu_phone) # # 返回当前查询的总条数 count_data = models.Stu.objects.all().count() print(count_data) # # 返回第一个对象 first_data = models.Stu.objects.all().first() # print(first_data) # # 返回最后一个对象 # last_data = models.Stu.objects.all().last() # print(last_data) # # 判断查询集中是否有数据,有则返回True # exists_data = models.Stu.objects.all().exists() # print(exists_data) # 比较运算符 # 判等运算,大小写敏感 # exact_data = models.Stu.objects.all().filter(stu_name__exact='jacks') # print(exact_data) # 包含运算,大小写敏感 # contains_data = models.Stu.objects.all().filter(stu_name__contains='ack') # print(contains_data) # # startswith 以指定值开头 startswith_data = models.Stu.objects.all().filter(stu_name__startswith='jac') print(startswith_data) # # endswith 以指定值结尾 endswith_data = models.Stu.objects.all().filter(stu_name__endswith='s') print(endswith_data) # isnull 是否为null snull_data = models.Stu.objects.all().filter(stu_name__isnull=False) print(isnull_data) # isnotnull 判断是否不为null # in 查询包含在指定范围的 in_data = models.Stu.objects.all().filter(id__in=[3, 7, 10, 13]) print(in_data.values('id')) #gt、gte、lt、lte 大于、大于等于、小于、小于等于 gt_data = models.Stu.objects.all().filter(id__gt=10) print(gt_data.values('id')) #year month day week_day hour minute second 时间类型运算符 year_data = models.Stu.objects.all().filter(add_time__year='2020') print(year_data) date_data = models.Stu.objects.all().filter(add_time__year__gt='2019') print(date_data.values('add_time')) # 使用Q对象进行复杂查询 Q_data = models.Stu.objects.all().filter(Q(id__gt=12)|Q(add_time__day='26')) print(Q_data.values('id', 'add_time')) return HttpResponse('查询数据')
特别注意:创建查询集不会带来任何数据库的访问,直到调用数据才会访问数据库,如迭代 序列化 与if合用。这种叫做惰性执行,好处是只有需要数据时才去访问数据库,减少了资源消耗