Django框架models使用group by详解


Posted in Python onMarch 11, 2020

Django框架models使用group by详解:

首先,看下列代码:

UserData.objects.filter(hubid=sensorid,time__range=(time2,time1)).values('hour').annotate(sum_out=Sum('outdoor'), sum_in=Sum('indoor'), sum_eat=Sum('kitchen'), sum_wash=Sum('toilet')).order_by('hour')

上述代码相当于sql语句:

select Sum('outdoor') as sum_out,Sum('indoor') as sum_in,Sum('kitchen') as sum_eat,Sum('toilet') as sum_wash,hour
where hubid='sensorid' and (time between time1 and time2)
group by hour
order by hour asc

另外,在Django中order_by(‘hour')表示按生序排列,若要按降序排列,则使用order_by(‘-hour')

补充知识:django模型orm进行group by

场景:三个模型分别为教师,学生,课程。一个教师可主讲多门课程,但一门课程只能由一个教师主讲,即教师和课程是一对多的关系。一个学生可选多门课程,一门课程可被多个学生选,即学生和教师为多对多的关系。

class Teacher(models.Model):
  name = models.CharField(max_length=20, verbose_name='教师姓名')

  def __unicode__(self):
    return self.name


class Student(models.Model):
  name = models.CharField(max_length=20, verbose_name='学生姓名')

  def __unicode__(self):
    return self.name


class Course(models.Model):
  name = models.CharField(max_length=20, verbose_name='课程名')
  teacher = models.ForeignKey(Teacher, verbose_name='主讲人')
  student = models.ManyToManyField(Student, verbose_name='选课学生')

  def __unicode__(self):
    return self.name

选取某教师主讲的pk最小的课:

Teacher.objects.annotate(Min('course__pk')).get(pk=2).course__pk__min

多对多也一样

这个例子不太典型,比如快递和其状态两张表是一对多关系,查最新的状态就可以使用这种方法(也可以在有新的状态时在快递表中每次更新最新的状态)

以上这篇Django框架models使用group by详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
pip命令无法使用的解决方法
Jun 12 Python
python对离散变量的one-hot编码方法
Jul 11 Python
Python匿名函数及应用示例
Apr 09 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
django删除表重建的实现方法
Aug 28 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Python图片的横坐标汉字实例
Dec 04 Python
使用Tkinter制作信息提示框
Feb 18 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
Python基础之进程详解
May 21 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 #Python
python 链接sqlserver 写接口实例
Mar 11 #Python
浅谈Python中range与Numpy中arange的比较
Mar 11 #Python
python读取当前目录下的CSV文件数据
Mar 11 #Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 #Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 #Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 #Python
You might like
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
读jQuery之五(取DOM元素)
2011/06/20 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
Python3中的2to3转换工具使用示例
2015/06/12 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
python脚本开机自启的实现方法
2019/06/28 Python
应届生财务管理求职信
2013/11/06 职场文书
五年级科学教学反思
2014/02/05 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题