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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
Python算法应用实战之队列详解
Feb 04 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
Python持续监听文件变化代码实例
Jul 22 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 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上传图片生成缩略图(GD库)
2016/01/06 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
浅说js变量
2011/05/25 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
用js实现放大镜效果
2020/10/28 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
深入理解Django的中间件middleware
2018/03/14 Python
python删除不需要的python文件方法
2018/04/24 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python解析多层json操作示例
2019/12/30 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
晚宴邀请函范文
2014/01/15 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
《去年的树》教学反思
2014/04/11 职场文书
高三英语教学计划
2015/01/23 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python