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

  • 相关阅读:
    动态设置字体大小需要注意的点
    getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
    统计图钻取的明细报表在非模态窗口中显示
    局部区块多个报表 TAB 页切换及局部区块的参数查询
    分栏报表制作攻略
    多值关联过滤
    鼠标悬停出现提示信息怎么做
    复杂报表设计之动态报表
    Logo(图片)作为报表水印的解决方法
    分组填报表的制作
  • 原文地址:https://www.cnblogs.com/glz666/p/django_inquire.html
Copyright © 2020-2023  润新知