• 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'))
    
  • 相关阅读:
    podium服务器端的微前端开发框架
    几个java proxy servlet 工具
    Presto Infrastructure at Lyft
    cube.js 通过presto-gateway 进行连接
    presto-gateway nodejs client
    presto-gateway 试用以及docker 镜像制作
    presto-gateway lyft 团队开源的prestodb 的负载均衡、代理、网关工具
    Singer 修改tap-s3-csv 支持minio 连接
    plotly-dash 简单使用(一)
    smashing 三方widgets 使用
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/11523380.html
Copyright © 2020-2023  润新知