Django中日期时间型字段进行年月日时分秒分组统计


Posted in Python onNovember 27, 2020

1.数据结构说明:

数据结构如下:modification字段为修改数据时间字段,格式为 年,月,日,时,分,秒。
案例场景为,根据modification字段,统计每个统计粒子,产生数据的条数。如需要统计2020年10月29日 每个小时段产生数据的条数。

Django中日期时间型字段进行年月日时分秒分组统计

要进行这种统计需要用到 Django的connection库。
统计年月日粒子用 date_trunc_sql,统计时分秒用 datetime_extract_sql

2.进行年月日粒子的统计

 2.1 官方 date_trunc_sql 原型

def datetime_trunc_sql(self, lookup_type, field_name, tzname):
 """
 Given a lookup_type of 'year', 'month', 'day', 'hour', 'minute', or
 'second', return the SQL that truncates the given datetime field
 field_name to a datetime object with only the given specificity.
 """
 raise NotImplementedError('subclasses of BaseDatabaseOperations may require a datetime_trunc_sql() method')

解释说明下:

函数需要传入三个参数:

  • lookup_type:统计粒子(year->年,月->month,day->日,hour->时,minute->分,second->秒)
  • field_name:统计字段的名次
  • tzname:时区,在中国一般用的是东8区,传入8即可

2.2 年

from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'

select = {'year': connection.ops.datetime_trunc_sql('year', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('year').annotate(number=Count('id')).order_by("year")[0:9]

for key in result:
 print(key)

>>{'year': datetime.datetime(2019, 1, 1, 0, 0), 'number': 2168}
>>{'year': datetime.datetime(2020, 1, 1, 0, 0), 'number': 9369}

2.3 月

from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'

select = {'month': connection.ops.datetime_trunc_sql('month', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('month').annotate(number=Count('id')).order_by("month")[0:9]

for key in result:
 print(key)
 
>>{'month': datetime.datetime(2019, 6, 1, 0, 0), 'number': 8}
>>{'month': datetime.datetime(2019, 7, 1, 0, 0), 'number': 51}
>>{'month': datetime.datetime(2019, 8, 1, 0, 0), 'number': 118}
>>{'month': datetime.datetime(2019, 9, 1, 0, 0), 'number': 7}
>>{'month': datetime.datetime(2019, 10, 1, 0, 0), 'number': 731}
>>{'month': datetime.datetime(2019, 11, 1, 0, 0), 'number': 514}
>>{'month': datetime.datetime(2019, 12, 1, 0, 0), 'number': 739}
>>{'month': datetime.datetime(2020, 1, 1, 0, 0), 'number': 483}
>>{'month': datetime.datetime(2020, 2, 1, 0, 0), 'number': 921}

2.4 日

from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'

select = {'day': connection.ops.datetime_trunc_sql('day', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('day').annotate(number=Count('id')).order_by("day")[0:9]

for key in result:
 print(key)
 
>>{'day': datetime.datetime(2019, 6, 28, 0, 0), 'number': 1}
>>{'day': datetime.datetime(2019, 6, 29, 0, 0), 'number': 7}
>>{'day': datetime.datetime(2019, 7, 2, 0, 0), 'number': 1}
>>{'day': datetime.datetime(2019, 7, 11, 0, 0), 'number': 3}
>>{'day': datetime.datetime(2019, 7, 20, 0, 0), 'number': 32}
>>{'day': datetime.datetime(2019, 7, 21, 0, 0), 'number': 2}
>>{'day': datetime.datetime(2019, 7, 29, 0, 0), 'number': 3}
>>{'day': datetime.datetime(2019, 7, 31, 0, 0), 'number': 10}
>>{'day': datetime.datetime(2019, 8, 1, 0, 0), 'number': 20}

2.5 时

from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'

select = {'hour': connection.ops.datetime_trunc_sql('hour', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('hour').annotate(number=Count('id')).order_by("hour")[0:9]

for key in result:
 print(key)
 
>>{'hour': datetime.datetime(2019, 6, 28, 17, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 6, 29, 9, 0), 'number': 6}
>>{'hour': datetime.datetime(2019, 6, 29, 10, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 7, 2, 14, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 7, 11, 14, 0), 'number': 2}
>>{'hour': datetime.datetime(2019, 7, 11, 15, 0), 'number': 1}
>>{'hour': datetime.datetime(2019, 7, 20, 11, 0), 'number': 24}
>>{'hour': datetime.datetime(2019, 7, 20, 12, 0), 'number': 3}
>>{'hour': datetime.datetime(2019, 7, 20, 13, 0), 'number': 2}

2.6 分

from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'

select = {'minute': connection.ops.datetime_trunc_sql('minute', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('minute').annotate(number=Count('id')).order_by("minute")[0:9]

for key in result:
 print(key)
 
>>{'minute': datetime.datetime(2019, 6, 28, 17, 22), 'number': 1}
>>{'minute': datetime.datetime(2019, 6, 29, 9, 6), 'number': 4}
>>{'minute': datetime.datetime(2019, 6, 29, 9, 39), 'number': 1}
>>{'minute': datetime.datetime(2019, 6, 29, 9, 41), 'number': 1}
>>{'minute': datetime.datetime(2019, 6, 29, 10, 4), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 2, 14, 57), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 11, 14, 48), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 11, 14, 54), 'number': 1}
>>{'minute': datetime.datetime(2019, 7, 11, 15, 40), 'number': 1}

2.7 秒

from django.db import connection
from django.db.models import Count
# 'year', 'month', 'day', 'hour', 'minute', 'second'

select = {'second': connection.ops.datetime_trunc_sql('second', 'establish', 8)}
result = models.FocusOnRecord.objects.extra(select=select).values('second').annotate(number=Count('id')).order_by("second")[0:9]

for key in result:
 print(key)

>>{'second': datetime.datetime(2019, 6, 28, 17, 22, 54), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 1), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 18), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 35), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 6, 36), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 39, 30), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 9, 41, 17), 'number': 1}
>>{'second': datetime.datetime(2019, 6, 29, 10, 4, 15), 'number': 1}
>>{'second': datetime.datetime(2019, 7, 2, 14, 57, 56), 'number': 1}

到此这篇关于Django中日期时间型字段进行年月日时分秒分组统计的文章就介绍到这了,更多相关Django 日期时间型字段统计内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的设计模式编程入门指南
Apr 02 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
python中range()与xrange()用法分析
Sep 21 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
Jun 13 Python
python获取百度热榜链接的实例方法
Aug 25 Python
python turtle绘图
May 04 Python
Python基于execjs运行js过程解析
Nov 27 #Python
celery在python爬虫中定时操作实例讲解
Nov 27 #Python
python输出国际象棋棋盘的实例分享
Nov 26 #Python
Django多个app urls配置代码实例
Nov 26 #Python
python Xpath语法的使用
Nov 26 #Python
python模拟点击玩游戏的实例讲解
Nov 26 #Python
Python批量修改xml的坐标值全部转为整数的实例代码
Nov 26 #Python
You might like
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
javascript中强制执行toString()具体实现
2013/04/27 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
Python functools模块学习总结
2015/05/09 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python实现操作文件(文件夹)
2019/10/31 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
计算机网络毕业生自荐信
2013/10/01 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
Python 实现定积分与二重定积分的操作
2021/05/26 Python
Python的这些库,你知道多少?
2021/06/09 Python