一  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. css背景图自适应

    在开发时,修改了d2admin的登录页面.使用了背景图片,但是ui给的图过于大(可能是我电脑屏幕小哈)无法完整的显示到页面上,所以修改了代码,可以完整显示背景图. 代码如下:background: u ...

  2. 关于 matplotlib

    注意,需要 zlib, 需要 Tkinter pip install matplotlib import numpy as np import matplotlib.pyplot as plt plt ...

  3. SpringCloud微服务实战一:Spring Cloud Eureka 服务发现与注册中心(高可用实列为两个注册中心)

    微服务架构: 微服务架构的核心思想是,一个应用是由多个小的.相互独立的.微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖.不同服务通过一些轻量级交互机制来通信,例如 RPC.HTTP 等, ...

  4. 2018-2-13-wpf-PreviewTextInput-在鼠标输入获得-_u0003

    title author date CreateTime categories wpf PreviewTextInput 在鼠标输入获得 � lindexi 2018-2-13 17:23:3 +08 ...

  5. Leetcode34.Find First and Last Position of Element in Sorted Array在排序数组中查找元素的位置

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...

  6. 一款优秀的前端JS框架—AngularJS

      前  言 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML,且通过 表 ...

  7. day38 21-今天的内容总结

    以前我们在web层里面去调Service再在Service里面去调DAO是一路new过去的,在web层里面new Service,然后在Service里面new DAO.每次你都需要主动去找这个对象. ...

  8. Python 正则表达式语法实例

  9. 【如花美眷】初探weex

    我想我更喜欢weex的原因,应该是weex可以直接运行在浏览器中,而不是像react-native需要运行在模拟设备中. 我想这个原因足以让我使用vue而不是RN. 初探就是稍微运行一下,来看步骤 可 ...

  10. pytest fixture 利用 params参数实现用例集合

    @pytest.fixture有一个params参数,接受一个列表,列表中每个数据都可以作为用例的输入.也就说有多少数据,就会形成多少用例.如下面例子,就形成3条用例 test_parametrizi ...