20-2 orm分组和聚合以及在项目中执行的一些方法
一 orm分组和聚合
参考:https://www.cnblogs.com/liwenzhou/p/8660826.html
1 表结构:
# 第一张表
class Employee1(models.Model):
name = models.CharField(max_length=12)
age = models.IntegerField()
salary = models.IntegerField()
dept = models.CharField(max_length=12) #下面两张表互相关联
class Dept(models.Model):
name = models.CharField(max_length=12) class Employee2(models.Model):
name = models.CharField(max_length=12)
age = models.IntegerField()
salary = models.IntegerField()
dept = models.ForeignKey(to="Dept")
#查询所有
# ret = models.Employee1.objects.all() # select * from employee1;
# print(ret) # ret = models.Employee1.objects.values() # [{}, {}] # values可以指定title查询 # ret = models.Employee1.objects.values("dept") # select dept from employee1; #分组聚合查询,在一张表里面 annotate是分组
from django.db.models import Avg, Max, Min, Count, Sum
# ret = models.Employee1.objects.values("dept").annotate(avg_salary=Avg("salary")).values("dept", "avg_salary") # 垮表查询
ret = models.Employee2.objects.values("dept_id").annotate(avg_salary=Avg("salary")).values("dept__name", "avg_salary")
annotate()
annotate()前面查的是什么就按照什么分组
.values("dept").annotate()就表示按照dept分组
二 . 时间格式化函数
1. MySQL
DATE_FORMAT(字段, '格式')
2. sqlite
strftime('格式', 字段)
例子:
# 拿到一个日期归档的数据
archive_list = models.FaultReport.objects.all().extra(
# select={"ym": "date_format(create_time, '%%Y-%%m')"} # MySQL日期格式化的写法
select={"ym": "strftime('%%Y-%%m', create_time)"} # sqlite数据库日期格式化的写法
).values("ym").annotate(num=Count("id")).values("ym", "num")
# 解释,查询所有的故障,并且按故障的创建时间去分组统计一共有多少故障,id指的是faultreport这个故障表里的id
Django ORM执行原生SQL语句, 使用extra()执行部分sql语句
三 二级路由
urls配置:
#使用之前先导入你的二级路由
from fault_reporting import urls as fault_report_urls # 二级路由
# 故障总结主页面
url(r'^fault-report/', include(fault_report_urls)), # 以fault-report开头的所有路由都交给二级路由去处理
二级路由urls配置:
from django.conf.urls import url
from fault_reporting import views urlpatterns = [ # 第一版, 特别low版
# url('^lob/(.*)/$', views.lob),
# url('^tag/(.*)/$', views.tag),
# url('^archive/(.*)/$', views.archive),
#
# # 第二版: 三合一
# url(r'(lob|tag|archive)/(.*)/$', views.sanhe1), # sanhe1(request, *args) args[0]=="lob" # 第三版: 四合一
url(r'(lob|tag|archive)/(.*)/$', views.index), # index(request, "lob", "游戏") ]
views配置:
report_list = models.FaultReport.objects.all()
# 如果有参数,并且参数长度是2
if args and len(args) == 2:
# 进入细分查询
if args[0] == "lob":
# 按业务线查询,
report_list = report_list.filter(lob__title=args[1]) #args[1]指的是视频等业务
elif args[0] == "tag":
# 是按照标签查询
report_list = report_list.filter(tags__title=args[1])
else:
# 按照日期(年月)来查询
try:
year, month = args[1].split("-") #以“——”分割取出年和月,
report_list = report_list.filter(create_time__year=year, create_time__month=month)#按照创建时间取出内容
except Exception:
report_list = []
20-2 orm分组和聚合以及在项目中执行的一些方法的更多相关文章
- 简单ORM工具的设计和编写,自己项目中曾经用过的
http://www.cnblogs.com/szp1118/archive/2011/03/30/ORM.html 在之前的一个项目中自己编写了一个简单的ORM小工具,这次重新整理和重构了一下代码, ...
- 70 多表查询的分组F 聚合 Q 查询
聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函 ...
- pandas分组和聚合
Pandas分组与聚合 分组 (groupby) 对数据集进行分组,然后对每组进行统计分析 SQL能够对数据进行过滤,分组聚合 pandas能利用groupby进行更加复杂的分组运算 分组运算过程:s ...
- mysql 分组和聚合函数
mysql 分组和聚合函数 Mysql 聚集函数有5个: 1.COUNT() 记录个数(count(1),count(*)统计表中行数,count(列名)统计列中非null数) 2.MAX() 最大值 ...
- MongoDB学习(使用分组、聚合和映射-归并)
使用分组.聚合和映射-归并 MongoDB的强大功能之一,是直接在服务器对文档的值进行复杂的操作,而不用先发文档发送到客户端在进行处理. 结果分组 对大型数据集进行查询操作时,通常会根据文档的字段值对 ...
- pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用
pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用 量化交易里, 需要进行大量的分组和统计, 以方便自己处优势的位置/机会. 比如对股价进行趋势分析, 波动性分析, 量 ...
- FreeSql (二十三)分组、聚合
IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data ...
- FastReport分组与聚合
本来看上去都觉得简单顺便训练下,是想对Customer表中的Company字段以第1个开头的字母分组,结果自己因喜欢将那些东西都集中在一起进行训练,在那个Master-Slave上做例子,并且没用另外 ...
- django中聚合aggregate和annotate GROUP BY的使用方法
接触django已经很长时间了,但是使用QuerySet查询集的方式一直比较低端,只会使用filter/Q函数/exclude等方式来查询,数据量比较小的时候还可以,但是如果数据量很大,而且查询比较复 ...
随机推荐
- IoT: 物联网安全测试经验总结
前言 今年早些时候,我参与了许多关于物联网解决方案的安全测试.主要目标是找出体系结构和解决方案中的漏洞.在这篇文章中,我将讨论一些与物联网解决方案的问题和挑战. 什么是物联网? 在你学习有关IPv6的 ...
- Visifire For WPF 图表控件 如何免费
可能用WPF生成过图表的开发人员都知道,WPF虽然本身的绘图能力强大,但如果每种图表都自己去实现一次的话可能工作量就大了, 尤其是在开发时间比较紧的情况下.这时候有必要借助一种专业的图表工具. Vis ...
- OpenLayers使用symbolizers样式特征
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- 核K-均值聚类(Kernel K-means Clustering)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wxcdzhangping/article/details/31366143 问题: 设 ...
- FreeMarker 获取页面appplication、request、session
使用Request里的Attribute值最简单的方法就是直接${AttributeName}或者安全一点:${AttributeName!"default Value"} 1.取 ...
- Docker Tomcat部署
1.下载tomcat镜像 docker pull tomcat 2.上传项目 /etc/tomcat/webapps/ 3.启动tomcat容器 docker run -d --name tomcat ...
- 通过inputSplit分片size控制map数目
前言:在具体执行Hadoop程序的时候,我们要根据不同的情况来设置Map的个数.除了设置固定的每个节点上可运行的最大map个数外,我们还需要控制真正执行Map操作的任务个数. 1.如何控制实际运行的m ...
- 错觉-Info:让你难以置信的视错觉
ylbtech-错觉-Info:让你难以置信的视错觉 1.返回顶部 1. 看下图:如果你看到舞者逆时针旋转说明你用左脑,如果看到顺时针旋转说明你用右脑思维. 据说这是耶鲁大学五年的研究成果. 下图 ...
- excel怎么制作三维圆环图表
excel怎么制作三维圆环图表 excel怎么制作三维圆环图表?excel中想要制作一个三维圆环图表,该怎么制作呢?下面我们就来看看详细的教程,很简单,在Excel中,可以通过自带的圆环图功能生成二维 ...
- arcgis点密度专题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...