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中的变量、引用、拷贝和作用域的问题
Apr 07 Python
python复制文件的方法实例详解
May 22 Python
python读写ini配置文件方法实例分析
Jun 30 Python
详解Python的Django框架中的中间件
Jul 24 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
Python多线程多进程实例对比解析
Mar 12 Python
Python实现验证码识别
Jun 15 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
用python读写excel的方法
2014/11/18 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python挖矿算力测试程序详解
2019/07/03 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Python笔试面试题小结
2019/09/07 Python
美术教师岗位职责
2014/03/18 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
读书笔记怎么写
2015/07/01 职场文书
优质服务标语口号
2015/12/26 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
如何Tomcat中使用ipv6地址
2022/05/06 Servers