一  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()# 如果有参数,并且参数长度是2if 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 = []

 

©著作权归作者所有:来自51CTO博客作者huningfei的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. CCNA最实用的复习知识点(5)
  2. CCNA最实用的复习知识点(4)
  3. 《网工必备技术命令大全》
  4. 3分钟掌握思科路由器密码破解
  5. ISIS路由泄露,如何避免路由环路?
  6. 配置路由策略
  7. 在eve-ng模拟器上进行Cisco单臂路由配置,图文实例详解
  8. BGP路由优选原则:优选下一跳IGP metric较小路由
  9. Forefront TMG+路由器后Internet不能正常访问内网的Web服务器和

随机推荐

  1. android pdf 类库
  2. Android 获取当前设备的IP地址
  3. android studio实现打电话
  4. android图像处理系列之三--图片色调饱和度
  5. Android(安卓)adbd配置
  6. tools:context =“activityname”布局文
  7. [原]android 中如何飞行模式的几个操作
  8. Android 图片缩放与旋转
  9. 进度条及拖动条背景颜色设置(progressDraw
  10. Android windowSoftInputMode属性解析