• python_django_models模块中的查询


    查询集:表示从数据库获取的对象集合,查询集可以有多个过滤器,过滤器就是一个函数(方法),基于所给参数限制查询集结果
    从sql角度来说,查询集和select等价,过滤器和where等价

    查询集特点:

      惰性执行:创建查询集不会带来任何的数据访问,直到调用数据(要用滴时候)时,才会访问数据

      直接访问数据的情况(直接向数据库拿):迭代/序列化/与if合用

    返回查询集的方法称为过滤器

    过滤器方法:

      返回一堆数据的过滤器:

    all() 返回查询集中所有的对象(有啥返回啥)
    filter()

    返回符合条件的数据值

    格式:.filter(键=值)

         .filter(键=值,键=值)

         .filter(键=值).filter(键=值)

    exclude() 过滤掉符合条件的数据值
    order_by() 排序
    values() 返回查询集中具体的数据值(一个列表,其中一条数据就是一个对象)

      返回单个数据的过滤器:

    get()

    返回一个满足条件的对象

    注:若没有找到符合条件的对象,会引发模型类DoesNotExist异常

      若找到多个对象,会引发模型类MultipleObjectReturned异常

    count()  返回当前查询集的对象个数
    first()  返回查询集的第一个对象
    last()  返回查询集的最后一个对象
    exists()  判断查询集中是否有数据,若有数据返回True

    限制查询集:查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句
    注:下标不能是负数
    举个栗子:

      显示前5条:studentList=Students.stuObj1.all()[0:5]
      分页显示:studentList=Students.stuObj1.all()[(page-1)*5:page*5]

    查询集的缓存:每个查询集都包含一个缓存来最小化的对数据库进行访问

      在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,
      django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存

    字段查询:
    概述:实现类sql中where语句,作为方法filter(),exclude(),get()的参数
    语法:属性名称__比较运算符 = 值
    外键:属性名_id

    比较运算符:

    exact exact:判断(大小写敏感,在前面加上i, iexact就表示不区分大小写)
    contains 是否包含(大小写敏感,在前面加上i,icontains就表示不区分大小写)(例:studentsList = Students.stuObj1.filter(name__icontains="ni"))
    startswith/endswith 以value开头或结尾(大小写敏感,在前面加上i,istartswith/iendswith就表示不区分大小写)(例:.filter(name__istartswith="ni"))
    isnull/isnotnull 是否为空(例:.filter(name__isnull=True))
    in in:是否包含在范围内(例:.filter(pk__in=[2,3,4,6,8]))    (【pk】主键)
    gt/gte/lt/lte 大于/大于等于/小于/小于等于(例:.filter(age__gt=30))
    year/month/day/week_day/hour/minute/second 匹配年/月/日....(例:.filter(lastTime__year=2017))

    跨关联查询:

        处理join查询(连接查询)

        语法:模型类名__属性名__(比较运算符)

    举个栗子:

     grade = Grades.objects.filter(students__contend__contains='nili')  # 模型类名__属性名__比较运算符
    # 带有‘nili’这几个字母的数据是属于哪个班级的 print(grade)

    查询快捷:

        pk(主键)

    聚合函数:使用aggregate()函数返回聚合函数的值

    Avg 平均值
    Count 计数
    Max 最大值
    Min 最小值
    Sum 求和

    举个栗子:

    from django.db.models import Max
    def studentsearch(request):
      maxAge = Students.stuObj1.aggregate(Max('age'))
      print(maxAge)

    F对象:
     可以使用模型的A属性与B属性进行比较,且支持F对象的算术运算

    举个栗子:

    from django.db.models import F
    
    def grades(request):
      g = Grades.objects.filter(girl_num__gt=('boy_num')+20)
      print(g)
      return HttpResponse('....')

    Q对象:
    过滤器的方法中的关键字参数,进行or查询就可以使用Q对象

    举个栗子:

    from django.db.models import F,Q
    
    def studentss(request):
      studentsList = Students.stuObj1.filter(Q(pk__lte=3)|Q(age__gt=50)) # 或 pk(主键)
      studentsList = Students.stuObj1.filter(Q(pk__lte=3)) # 只用于匹配
      studentsList = Students.stuObj1.filter(~Q(pk__lte=3)) # 取反
  • 相关阅读:
    word 中如何取消格式标记
    linux 之 汇编语言 的mov和movl sub 和subl add 和addl 的区别??
    Linux 之 AT&T汇编语言 mov、add、sub指令、数据段
    D65光源
    802.11 ------ 简介
    802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
    NAT ------ 为什么手动设置NAT端口映射(转发)不成功,导致访问不了局域网服务器
    UDP ------ UDP 详解
    UDP ------ UDP IPPROTO_UDPLITE 参数
    GNU C ------ __attribute__
  • 原文地址:https://www.cnblogs.com/Vera-y/p/11918071.html
Copyright © 2020-2023  润新知