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))
  • 相关阅读:
    C++_重载、重写和重定义的区别
    C++静态库与动态库
    C++ 中重载运算符 “<” 及 friend属性
    C++中,关于#include<***.h>和#include"***.h"的区别
    static_cast, dynamic_cast, const_cast讨论
    浅析C++中static关键字
    C语言包含头文件时用引号和尖括号的区别
    vc实现透明位图,透明背景
    VS2008调试技巧——断点失效
    Spring解决循环依赖的理解
  • 原文地址:https://www.cnblogs.com/shuai06/p/12397509.html
Copyright © 2011-2022 走看看