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