Django 笔记-4-模型查询

模型查询

概述

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

查询集

简介
  • 在管理器中调用过滤器方法返回查询集合;
  • 查询集合经过过滤器后返回新的查询集合, 所以可以写成链式调用
  • 惰性执行: 创建查询集合不会带来任何数据的访问, 直到调用数据时, 才会访问数据;
  • 直接访问数据的情况:
    • 迭代
    • 序列化
    • 与if 合用
  • 返回查询集合的方法称为过滤器
方法
返回查询集合
  • all()
  • 返回查询集合中的所有数据
  • filter()
  • 保留符合条件的数据
  • filter(键=值)
  • filter(键=值, 键=值)
  • filter(键=值).filter(键=值)
  • exclude()

过滤掉符合条件的数据

  • order_by()

排序

  • value()

一条数据就是一个对象(字典), 返回一个列表;

返回单个数据
  • get()

返回一个满足条件的对象

注意:

  • 如果没有找到符合条件的对象, 会引发<“模型类.DoesNotExist”>异常
  • 如果找到多个对象,会引发<“模型类.MultipleObjectsReturned”>异常
  • count()

返回当前查询集合中的对象个数

  • first()

返回查询集合中的第一个对象

  • last()

返回查询集合中的最后一个对象

  • exist()

判断查询集合中是否存在要查询的数据;

限制查询集

查询集合返回列表, 可以使用下标的方法进行限制, 等同于sql语句中的limit.

例:

studentslist = Student.objects.all()[0:5]

注意: 下标不能是负数

查询集的缓存

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

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

字段查询
  • 概述

    实现了sql中的where语句, 作为方法filter(), exclude(), get()的参数

  • 语法

    属性名称_比较运算符=值

  • 外键

    属性名_id

  • 转义

    类似sql中的like语句: like语句中使用%是为了匹配占位, 匹配数据中的%{where like %}

    filter(name__contains=‘%)

  • 比较运算符

    • exact:

      • 判断, 区分大小写
      • filter(isDelete=False)
    • contain

      • 是否包含, 区分大小写

        studentList = Student.objects.filter(name__contains="sun")
        
    • startwith/endwith

      以某个字段开头或结尾, 区分大小写

以上4个方法, 在前面加上i, 表示不区分大小写: iexact, icontain, istartwith, iendwith

  • in

    • 是否包含在范围内

      StudentList = Student.objects.filter(pk__in=[2,4,6,8,10])
      
  • gt/gte/lt/lte

    大于/大于等于/小于/小于等于

    StudentList = Student.objects.filter(age__gt=30)
    
  • year/month/day/week_day/hour/minute/second

    StudentList = student.objects.filter(lastTime__year=2017)
    
  • 跨关联查询

    处理join查询

    语法:

    模型类名__属性名__比较运算符

  • 查询快捷

    pk: 代表的主键

聚合函数

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

Avg/Count/Max/Min/Sum

平均/计数/最大/最小/求和

maxAge = Student.objects.aggregate(Max("age"))
F对象

过滤器方法中的关键字参数

可以使用模型的A属性和B属性进行比较

from django.db.models import F
Grade.objects.filter(girlnum__gt=F(‘boynum’))

支持F对象的算术运算

Grade.objects.filter(girlnum__gt=F(‘boynum’+20))
Q对象

概述: 过滤器方法中的关键字参数, 条件为And模式

功能: 进行or查询

例:

Student.objects.filter(Q(pk__lte=3) | Q(age__gt=50))

如果只有一个Q, 则表示匹配Q内的数据, 同filter.

如果在Q前加~, 则表示取反

Student.objects.filter(~Q(age__gt=50))

转载于:https://my.oschina.net/frank1126/blog/3054174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值