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读取html中指定元素生成excle文件示例
Apr 03 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
Python中的模块和包概念介绍
Apr 13 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
Python中Selenium库使用教程详解
Jul 23 Python
使用jupyter notebook运行python和R的步骤
Aug 13 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 获取可变函数参数的函数
2009/08/26 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
php魔术变量用法实例详解
2014/11/13 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
读jQuery之一(对象的组成)
2011/06/11 Javascript
javascript中常用编程知识
2013/04/08 Javascript
js Date概念详细介绍
2013/11/22 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
如何转换一个字符串到enum值
2014/04/12 面试题
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
Python道路车道线检测的实现
2021/06/27 Python
springboot读取resources下文件的方式详解
2022/06/21 Java/Android