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 相关文章推荐
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
python的else子句使用指南
Feb 27 Python
Python中Collections模块的Counter容器类使用教程
May 31 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
理解python中生成器用法
Dec 20 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
python dumps和loads区别详解
Feb 04 Python
python如何变换环境
Jul 21 Python
基于python调用jenkins-cli实现快速发布
Aug 14 Python
pycharm配置QtDesigner的超详细方法
Jan 25 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
python机器学习之贝叶斯分类
2018/03/26 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Python如何获取文件路径/目录
2020/09/22 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
python中实现词云图的示例
2020/12/19 Python
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
小学教育毕业生自荐信
2013/11/18 职场文书
绩效专员岗位职责
2013/12/02 职场文书
请假条格式范文
2014/04/10 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
书法社团活动总结
2015/05/07 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
python 中的@运算符使用
2021/05/26 Python
什么是SOLID
2022/03/24 Javascript