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等方式来查询,数据量比较小的时候还可以,但是如果数据量很大,而且查询比较复 ...
随机推荐
- jquery版的网页倒计时效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- poj 1144 Network(割点 入门)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10907 Accepted: 5042 Descript ...
- light oj 1149 Factors and Multiples(二分匹配)
LightOJ1149 :Factors and Multiples 时间限制:2000MS 内存限制:32768KByte 64位IO格式:%lld & %llu 描述 You w ...
- invalid use of null value
给mysql的数据表的一个字段插入数据,不成功, 然后在数据表设计中,把不是null勾选上,又提示 invalid use of null value 这种情况比较尴尬 只能删掉这一个字段,然后新建一 ...
- sqlserver 2008 R2 安装教程(心得记录)
在这里简单的记录下自己安装sqlserver的过程吧(本人以前安装失败过,然后卸载了,就一直没用,现在由于工具原因,重新安装,过程相对第一次安装会复杂点) 1.首先,把以前安装的注册表的对应c盘的文件 ...
- IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)
IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图) .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...
- Linux下允许MySQL 授权远程连接
1.mysql -u root -p (root)用户名 2.mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'r ...
- java-继承进阶_抽象类_接口
概要图 一, 继承的进阶 1.1,成员变量 重点明确原理. 特殊情况: 子父类中定义了一模一样的成员变量. 都存在于子类对象中. 如何在子类中直接访问同名的父类中的变量呢? 通过关键字 super来完 ...
- vue-cli3 搭建的前端项目基础模板
基于 vue-cli3 搭建的前端模板,fork 或 clone 本仓库,即可搭建完成一个新项目的基础模板,源码地址,欢迎 star 或 fork 特性 CSS 预编译语言:less Ajax: ax ...
- KiCad 工程用 Git 管理需要忽略哪些文件?
KiCAD 工程用 Git 管理需要忽略哪些文件? KiCAD 使用的 文本格式,天生可以用 Git 来管理. 但是并非所有文件需要使用 Git 管理,以下文件可以忽略. *.bak fp-info- ...