zoukankan      html  css  js  c++  java
  • 09_模型的常用查询

    1. 常用查询

    通过模型类上的管理器来构造QuerySet
        - 模型类上的管理器是啥?
            模型类.objects
        - QuerySet 表示数据库中对象的集合
            等同于select 语句, 不过其是惰性的
    
    案例:
        1. first()  获取第一条数据, 返回的是对象   # Students.objects.first()
        2. last()   获取最后一条, 返回的也是对象   # Students.objects.last()
        3. get(**kwargs) 根据给定的条件, 获取一个对象, 如果有多个对象符合  # Stu.objects.get(pk=1)
        4. all()    获取所有记录, 返回的是queryset   # Stu.objects.all()
        5. filter(**kwargs) 根据给定的条件, 获取过滤后的queryset   # Stu.objects.filter(name='long')
        6. exclude(**kwargs)    跟filter的使用方法一致, 作用相反, 它是排除  # Stu.objects.exclude(name='long')  查询name != 'long' 的所有数据
        7. values(*fields)  返回一个queryset, 返回一个字典列表, 而不是数据对象  # Stu.objects.all.values()  
        8. only(*fields)    返回queryset, 对象列表, 注意only一定包含主键字段 
        9. defer(*fields)   返回一个queryset, 作用与only相反
        10. order_by(*fields)   根据给定的字段来排序, 默认是顺序, 字段名前加上`-`表示与默认排序相反的排序  Stu.objects.order_by('age') 正序    Stu.objects.order_by('-age')
        11. 切片      和Python的列表切片用法相似(注: 不支持负索引,大数据量在时不用步长)
    

    2. 常用条件查询 filter, exclude, get

    1. exact   Stu.objects.filter(name__exact='long')  # 查询name='long' 的数据, 与 = 差不多
    2. iexact
    3. contains  Stu.objects.filter(name__contains='long')   # 查询name 中包含有'long'的数据区分大小写
    4. icontains  不区分大小写
    5. in   Stu.objects.filter(age__in=[18, 20, 30]) # 查询age = 18 or 20 or 30 的数据
    6. range 范围区间   Stu.objects.filter(age__range=(18, 20))  # 查询age 范围在18到20 的, 包含18和20
    7. gt   大于   Stu.objects.filter(age__ge=18)  查询age>18的数据
            gte  大于等于
            lt
            lte
    8. startswith   找以什么开头的
    9. istartswith  # 不区分大小写的
    10. endwith
    11. iendwith
    12. isnull  # True False  对应sql中的: is null 和 is not null    # Stu.objects.filter(age__isnull=False)  # 查询age不为null的数据
    

    3. 聚合分组 from.db.models import Count, Avg, Max, Min, Sum

        通过queryset的aggregate()方法
        # 1. 聚合
            1. Count 统计数量
            2. Avg   求平均值  `如: Student.objects.aggregate(age_avg=Avg('age')) # 计算平均年龄`
            3. max
            4. Min
            5. Sum
        # 2. 分组, 与聚合一起用
        如: Student.objects.values('sex').annotate(Count('sex'))
    
  • 相关阅读:
    创建vue项目的时候报错,spawn yarn ENOENT
    理解比特币(4)——实现原理
    比特币(3)——比特币的其他优势
    比特币(2)——最大优势是价值存储
    如何在K8S中优雅的使用私有镜像库 (Docker版)
    [Go] godoc 打开本地文档, windows 同样适用
    [FAQ] Golang error strings should not be capitalized or end with punctuation
    [Go] gorm 错误处理 与 链式/Finisher方法
    [Go] golang 替换组件包 更新 go.mod, go.sum 的方式
    [FAQ] golang-migrate/migrate error: migration failed in line 0: (details: Error 1065: Query was empty)
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/11523380.html
Copyright © 2011-2022 走看看