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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
浅谈Python type的使用
Nov 19 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
Python编写万花尺图案实例
Jan 03 Python
Python基础之函数嵌套知识总结
May 23 Python
python批量创建变量并赋值操作
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
PHP4引用文件语句的对比
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
Python 模板引擎的注入问题分析
2017/01/01 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
使用python存储网页上的图片实例
2018/05/22 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python用Configobj模块读取配置文件
2020/09/26 Python
Python调用Redis的示例代码
2020/11/24 Python
Python中过滤字符串列表的方法
2020/12/22 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
助理政工师申报材料
2014/06/03 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
微信搭讪开场白
2015/05/28 职场文书