一  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分组和聚合以及在项目中执行的一些方法的更多相关文章

  1. 简单ORM工具的设计和编写,自己项目中曾经用过的

    http://www.cnblogs.com/szp1118/archive/2011/03/30/ORM.html 在之前的一个项目中自己编写了一个简单的ORM小工具,这次重新整理和重构了一下代码, ...

  2. 70 多表查询的分组F 聚合 Q 查询

    聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函 ...

  3. pandas分组和聚合

    Pandas分组与聚合 分组 (groupby) 对数据集进行分组,然后对每组进行统计分析 SQL能够对数据进行过滤,分组聚合 pandas能利用groupby进行更加复杂的分组运算 分组运算过程:s ...

  4. mysql 分组和聚合函数

    mysql 分组和聚合函数 Mysql 聚集函数有5个: 1.COUNT() 记录个数(count(1),count(*)统计表中行数,count(列名)统计列中非null数) 2.MAX() 最大值 ...

  5. MongoDB学习(使用分组、聚合和映射-归并)

    使用分组.聚合和映射-归并 MongoDB的强大功能之一,是直接在服务器对文档的值进行复杂的操作,而不用先发文档发送到客户端在进行处理. 结果分组 对大型数据集进行查询操作时,通常会根据文档的字段值对 ...

  6. pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用

    pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用 量化交易里, 需要进行大量的分组和统计, 以方便自己处优势的位置/机会. 比如对股价进行趋势分析, 波动性分析, 量 ...

  7. FreeSql (二十三)分组、聚合

    IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data ...

  8. FastReport分组与聚合

    本来看上去都觉得简单顺便训练下,是想对Customer表中的Company字段以第1个开头的字母分组,结果自己因喜欢将那些东西都集中在一起进行训练,在那个Master-Slave上做例子,并且没用另外 ...

  9. django中聚合aggregate和annotate GROUP BY的使用方法

    接触django已经很长时间了,但是使用QuerySet查询集的方式一直比较低端,只会使用filter/Q函数/exclude等方式来查询,数据量比较小的时候还可以,但是如果数据量很大,而且查询比较复 ...

随机推荐

  1. “Bootstrap做的响应式菜单在iPhone上点击不了二级菜单“的解决办法!

    只需把把点击的a(被点击的)变成button即可.

  2. GIT → 09:TortoiseGit 图形化工具

    GIT → 09:TortoiseGit 图形化工具

  3. 学习Python笔记---操作列表

    1.for循环: 编写for循环时,对于用语存储列表中每个值的临时变量,可指定任何名称. 在for循环中,想包含多少行代码都可以,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次. ...

  4. Comparator进行List集合排序

    对数据库中查询到的结果进行排序,一般开发中,实体类是没有实现Comparable接口的,所以不能实现compareTo()方法进行排序, 只能用Comparator去进行排序,只需要在带排序的集合中加 ...

  5. php 7.2 安装 mcrypt 扩展

    升级 php 7.2 后,使用微信提供的加解密代码时,提示 call to undefined function mcrypt_module_open() :大脑疯狂运转1秒钟后,得出结论:php 7 ...

  6. Spring_Hibernate

    Spring与Hiberante整合 通过hibernate的学习,我们知道,hibernate主要在hibernate.cfg.xml配置文件中 接下来我们看一下hibernate的一个配置文件 h ...

  7. 介绍vue项目中的axios请求(get和post)

    一.先安装axios依赖,还有qs依赖 npm install axios --save npm install qs --save qs依赖包用post请求需要用到的 插入一个知识点: npm in ...

  8. 服务端关闭session的重要性

    原因如下: 如果你的站点是一个每日请求上百万级规模的接口服务, 每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件. 一般而言,php的sess ...

  9. Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐。

    Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐. MINITAB 功能菜单包括:基础和高级统计工具: ...

  10. Beetl 3中文文档 转载 http://ibeetl.com/guide/

    Beetl作者:李家智(闲大赋) <xiandafu@126.com> 1. 什么是Beetl 广告:闲大赋知识星球,付费会员 Beetl( 发音同Beetle ) 目前版本是3.0.7, ...