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 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
python手写均值滤波
Feb 19 Python
Python局部变量与全局变量区别原理解析
Jul 14 Python
python中的django是做什么的
Jul 31 Python
Python之字典对象的几种创建方法
Sep 30 Python
python openssl模块安装及用法
Dec 06 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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 调用远程url的六种方法小结
2009/11/02 PHP
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
javascript语言结构小记(一)
2011/09/10 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python实现统计代码行数的方法
2015/05/22 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python制作图片缩略图
2019/04/30 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
重大事项社会稳定风险评估方案
2014/06/15 职场文书
监守自盗观后感
2015/06/10 职场文书
婚宴主持词
2015/06/30 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
java泛型通配符详解
2021/07/25 Java/Android
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js