使用django的ORM框架按月统计近一年内的数据方法

yipeiwu_com6年前Python基础

如下所示:

# 计算时间
time = datetime.datetime.now() - relativedelta(years=1)
# 获取近一年数据
one_year_data = Data.objects.filter(create_time__gte=time_ago)
# 分组统计每个月的数据
count_res = one_year_data\
			.annotate(year=ExtractYear('create_time'),month=ExtractMonth('create_time'))\
      .values('year', 'month').order_by('year', 'month').annotate(count=Count('id'))
print(count_res)

打印结果:

<QuerySet [{'year': 2018, 'month': 7, 'count': 3}, {'year': 2019, 'month': 5, 'count': 7}, {'year': 2019, 'month': 6, 'count': 161}]>

annotate()方法:

对数据集先进行分组然后再进行某些聚合操作或排序时,需要使用annotate方法来实现。与aggregate方法不同的是,annotate方法返回结果的不仅仅是含有统计结果的一个字典,而是包含有新增统计字段的查询集(queryset)。

以上这篇使用django的ORM框架按月统计近一年内的数据方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python3正则匹配re.split,re.finditer及re.findall函数用法详解

本文实例讲述了Python3正则匹配re.split,re.finditer及re.findall函数用法。分享给大家供大家参考,具体如下: re.split re.finditer r...

python装饰器实例大详解

一.作用域 在python中,作用域分为两种:全局作用域和局部作用域。  全局作用域是定义在文件级别的变量,函数名。而局部作用域,则是定义函数内部。  关于作用域,我们要理解两点:   ...

python实现的AES双向对称加密解密与用法分析

本文实例讲述了python实现的AES双向对称加密解密与用法。分享给大家供大家参考,具体如下: 高级加密标准(Advanced Encryption Standard,AES),在密码学...

pytorch使用指定GPU训练的实例

本文适合多GPU的机器,并且每个用户需要单独使用GPU训练。 虽然pytorch提供了指定gpu的几种方式,但是使用不当的话会遇到out of memory的问题,主要是因为pytorc...

python实现DNS正向查询、反向查询的例子

1.DNS查询过程: 以查询 www.baidu.com为例 (1)电脑向本地域名服务器发送解析www.baidu.com的请求(2)本地域名服务器收到请求后,先查询本地的缓存,如果找到...