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的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
深入解析Python中的上下文管理器
Jun 28 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
django框架防止XSS注入的方法分析
Jun 21 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
python调用摄像头的示例代码
Sep 28 Python
python利用opencv保存、播放视频
Nov 02 Python
python基础之while循环语句的使用
Apr 20 Python
pandas提升计算效率的一些方法汇总
May 30 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 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显示MySQL数据的三种方法
2008/06/05 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Django中使用group_by的方法
2015/05/26 Python
python协程之动态添加任务的方法
2019/02/19 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
python自动点赞功能的实现思路
2020/02/26 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python绘制雷达图实例讲解
2021/01/03 Python
python中time.ctime()实例用法
2021/02/03 Python
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
创文明城市标语
2014/06/16 职场文书
电子工程求职信
2014/07/17 职场文书
礼仪培训心得体会
2016/01/22 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers