` timeseries是一组django应用程序工具,旨在帮助整理和维护timeseries数据。
django-timeseries的Python项目详细描述
timeseries是一组django应用程序工具,旨在简化 时间序列数据的整理和维护。
要求
在postgresql上运行的项目支持django版本1.8+。
安装
pip install django-timeseries
用法
fromdatetimeimporttimedeltafromdjango.dbimportmodelsfromtimeseries.utilsimportTimeSeriesModel,TimeSeriesManagerclassAd(models.Model):objects=TimeSeriesManager()classRawAdData(TimeSeriesModel):TIMESERIES_INTERVAL=timedelta(days=1)# update daily N.B integers in seconds also workNOT_AVAILABLE=-1ad=models.ForeignKey(Ad,related_name='rawdata')views=models.BigIntegerField(default=NOT_AVAILABLE)clicks=models.BigIntegerField(default=NOT_AVAILABLE)classMonthlyAdReport(TimeSeriesModel):TIMESERIES_INTERVAL=timedelta(days=28)ad=models.ForeignKey(Ad,related_name='monthlyreports')avg_view_growth=models.FloatField()avg_click_growth=models.FloatField()defad_data_collector(queryset):""" should return an iterable that yields dictionaries of data needed to successfully create a RawAdData instance """return...defreport_data_collector(queryset):""" should return an iterable that yields dictionaries of data needed to successfully create a MonthlyAdReport instance """return...# in a shell>>>Ad.objects.update_timeseries('rawdata',ad_data_collector)# this return the results of a bulk_create call from the RawAdData manager# for ads that hadn't been updated in the last day>>>Ad.objects.update_timeseries('monthlyreports',report_data_collector)# this return the results of a bulk_create call from the MonthlyAdReport# manager for ads that hadn't had a report generated in the last 28 days>>>ad=Ad.objects.prefetch_latest('rawdata','monthlyreports').first()>>>printad.latest_rawaddata,ad.latest_monthlyreports
TimeSeries QuerySet方法
timeseries.utils.TimeSeriesQuerySet
向django queryset api添加4个主要方法,这些方法可用于 更新和维护时间序列数据。这些方法包括:
- 预取最新
- 过滤器已过时
- 上次更新
- 更新时间序列
update_timeseries
输入:related_name,collector,可选的force
返回:已安装的相关模型列表。
更新QuerySet的相关模型表(由相关名称给出) 使用可调用的提供程序“收集器”。
“collector”必须将引用模型的queryset作为其唯一 争论。它还必须返回一个可以 用于构造和保存相关模型的实例。
注意:只有具有过时数据的实例才会被更新,除非 使用“force”关键字参数显式强制。
filter_outdated
输入:*related_names
返回:queryset
返回一个QuerySet,该QuerySet将生成具有 与反向相关模型相关联的“过时”数据,如 指定的相关名称。
last_updated
输入:*related_names
返回:queryset
按照给定的方式注释最新相关实例的创建时间戳 通过反向关系的相关名称。
用法:
ad=Ad.objects.last_updated('rawdata').first()# assuming there's data related to adprintad.rawdata_last_updated# this will print the timestamp of when the associated data was# last updated
prefetch_latest
输入:*related_names
返回:queryset
公开最新关联的反向关系。
用法:
ad=Ad.objects.prefetch_latest('rawdata','monthlyreports').first()printad.latest_rawaddata,ad.latest_monthlyreports# this will print the reprs of the latest associated data# instances
其他实用程序
LatestQ
timeseries.utils
输入:related_name,**kwargs
返回:django.db.models.q instance
构造一个django.db.models.q实例,该实例允许查询 根据最新关联的反向关系执行。
注意:此方法设计用于与 timeseries.utils.timeseriesqueryset.last_已更新。
用法:
Ad.objects.last_updated('rawdata').filter(LatestQ('rawdata',views__gt=1000))