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之PyMongo使用总结
May 26 Python
Python Web编程之WSGI协议简介
Jul 18 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
Python  Django 母版和继承解析
Aug 09 Python
python的等深分箱实例
Nov 22 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
python中entry用法讲解
Dec 04 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
德劲1104的电路分析与改良
2021/03/01 无线电
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
什么是JavaScript
2009/08/13 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
快速查找Python安装路径方法
2020/02/06 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python操作redis数据库的三种方法
2020/09/10 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
自荐信格式范文
2013/10/07 职场文书
金融专业个人求职信范文
2013/11/28 职场文书
残疾人创业典型事迹
2014/02/01 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
法人代表任命书范本
2014/06/05 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
中标通知书格式
2015/04/17 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Python四款GUI图形界面库介绍
2022/06/05 Python