django模型查询

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合用。这种叫做惰性执行,好处是只有需要数据时才去访问数据库,减少了资源消耗

原文地址:https://www.cnblogs.com/glz666/p/django_inquire.html