zoukankan      html  css  js  c++  java
  • Django学习笔记之model篇(四)-- 补充

    聚合查询:

    首先,导入:

    from .models import User
    from django.db.models import Count,Avg,Max,Min,Sum,F,Q

    aggregate()是QuerySet 的一个终止子句,它返回一个包含一些键值对的字典

    rs = User.objects.all().aggregate(Avg('age')) # 求平均年龄
    rs = User.objects.all().aggregate(Avg(average_age='age')) # 求平均年龄,给其字段取一个名字
    rs=User.objects.all().aggregate(Avg('age'),Max('age'),Min('age'),Sum('age')) #

    分组查询:

    为调用的QuerySet中每一个对象都生成一个独立的统计值

    # 第一个value是分组条件,values会转换成一个字典,最后一个value是打印输出的值,annotate是分组处理
    # 学院的学生数量
    rs = Student.objects.all().values('department').annotate(count=Count('department')).values('department_id','count')
    # 每个学生报名课程的数量
    rs = Student.objects.all().values('course').annotate(count=Count('course')).values('s_id','count')
    # 课程的学生数量
    rs=Course.objects.all().values('student').annotate(count=Count('student')).values('c_name','count')
    

    F查询:

    同一张表针对两个字段的值的比较

    # Student表中,学院id小于学生学号的
    rs = Student.objects.filter(department__d_id__gt=F('s_id'))
    # 让所有人年龄加一岁
    User.objects.all().update(age=F('age')+1)

    Q查询:

    如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。
    Q对象可以使用&(and)、|(or)操作符组合起来
    使用~(not)操作符在Q对象前表示取反

    rs = User.objects.filter(name='xps',age=18)
    rs = User.objects.filter(Q(name='xps')|Q(age=18)) # 或
    # 查询name为xps,且id不为3的
    rs = User.objects.filter(Q(name='xps')&~Q(id=3))
  • 相关阅读:
    密码系统的安全性
    liboqs-量子安全密码算法开源C库
    密码基础知识(1)
    同态加密
    NTL 库函数
    以太坊相关的区块链知识
    53字符流中第一个不重复的字符
    基础小知识总结
    52表示数值的字符串 记忆
    HIHOcoder编程总结
  • 原文地址:https://www.cnblogs.com/shuai06/p/12397509.html
Copyright © 2011-2022 走看看