博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20-2 orm分组和聚合以及在项目中执行的一些方法
阅读量:5282 次
发布时间:2019-06-14

本文共 2996 字,大约阅读时间需要 9 分钟。

一  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 urlfrom fault_reporting import viewsurlpatterns = [    # 第一版, 特别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 = []

 

转载于:https://www.cnblogs.com/huningfei/p/9605853.html

你可能感兴趣的文章
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>
2019-8-5 考试总结
查看>>
JS中实现字符串和数组的相互转化
查看>>
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>