django 根据日月天统计数据

2019-10-29  本文已影响0人  forjie

利用Trunc统计日月周的数据

django 官网地址https://docs.djangoproject.com/en/2.2/ref/models/database-functions/

在统计数据中,我们会经常需要统计每天时间或者每月时间的数据,以前都是通过extra自己写select完成需求,现在有Trunc类,可以简单的实现统计的功能

比如下面统计每年(统计每天就是换成TruncDate):

>>> from datetime import datetime
>>> from django.db.models import Count
>>> from django.db.models.functions import TruncMonth, TruncYear
>>> from django.utils import timezone
>>> start1 = datetime(2014, 6, 15, 14, 30, 50, 321, tzinfo=timezone.utc)
>>> start2 = datetime(2015, 6, 15, 14, 40, 2, 123, tzinfo=timezone.utc)
>>> start3 = datetime(2015, 12, 31, 17, 5, 27, 999, tzinfo=timezone.utc)
>>> Experiment.objects.create(start_datetime=start1, start_date=start1.date())
>>> Experiment.objects.create(start_datetime=start2, start_date=start2.date())
>>> Experiment.objects.create(start_datetime=start3, start_date=start3.date())
>>> experiments_per_year = Experiment.objects.annotate(
...    year=TruncYear('start_date')).values('year').annotate(
...    experiments=Count('id'))
>>> for exp in experiments_per_year:
...     print(exp['year'], exp['experiments'])
...
2014-01-01 1
2015-01-01 2

在django.db.models.function中还有很多其他的方法

TruncMonth : 月份 
TruncYear : 年份
TruncWeek :周(在django2.1中才有)
TruncQuarter : 季度
TruncHour
TruncMinute
TruncSecond
TruncDay
上一篇下一篇

猜你喜欢

热点阅读