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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python中操作文件之write()方法的使用教程
May 25 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
Django 实现下载文件功能的示例
Mar 06 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
Python爬取成语接龙类网站
Oct 19 Python
python仿evething的文件搜索器实例代码
May 13 Python
python with语句的原理与用法详解
Mar 30 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
python 合并多个excel中同名的sheet
Jan 22 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 adodb分页实现代码
2009/03/19 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
django接入新浪微博OAuth的方法
2015/06/29 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
python 文件查找及内容匹配方法
2018/10/25 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Python如何计算语句执行时间
2019/11/22 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
技术经理的自我评价范文
2013/12/03 职场文书
小区门卫值班制度
2014/01/24 职场文书
难忘的一天教学反思
2014/04/30 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
厕所文明标语
2014/06/11 职场文书
圆明园观后感
2015/06/03 职场文书
昆虫记读书笔记
2015/06/26 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
在CSS中使用when/else的方法
2022/01/18 HTML / CSS