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散点图实例之随机漫步
Aug 27 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
python实发邮件实例详解
Nov 11 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
python中for in的用法详解
Apr 17 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python判断正负数方式
Jun 03 Python
5道关于python基础 while循环练习题
Nov 27 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
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
php实现分页显示
2015/11/03 PHP
对于this和$(this)的个人理解
2013/09/08 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
Puppet的一些技巧
2018/09/17 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
Python编码时应该注意的几个情况
2013/03/04 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
python中随机函数random用法实例
2015/04/30 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Django 路由控制的实现代码
2018/11/08 Python
Python之时间和日期使用小结
2019/02/14 Python
详解python深浅拷贝区别
2019/06/24 Python
python输入多行字符串的方法总结
2019/07/02 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
会计助理的岗位职责
2013/11/29 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
群众路线党课主持词
2014/04/01 职场文书
2015年工商所工作总结
2015/05/21 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python