Loading

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'))
posted @ 2019-09-15 16:53  未来已来,你来不来  阅读(143)  评论(0编辑  收藏  举报