`timeseries` 是一组 django 应用程序工具,旨在简化时间序列数据的整理和维护。
项目描述
timeseries 是一组 django 应用程序工具,旨在简化时间序列数据的整理和维护。
要求
支持 Django 版本 1.8+,适用于在 PostgreSQL 上运行的项目。
安装
pip install django-timeseries
用法
from datetime import timedelta
from django.db import models
from timeseries.utils import TimeSeriesModel, TimeSeriesManager
class Ad(models.Model):
objects = TimeSeriesManager()
class RawAdData(TimeSeriesModel):
TIMESERIES_INTERVAL = timedelta(days=1) # update daily N.B integers in seconds also work
NOT_AVAILABLE = -1
ad = models.ForeignKey(Ad, related_name='rawdata')
views = models.BigIntegerField(default=NOT_AVAILABLE)
clicks = models.BigIntegerField(default=NOT_AVAILABLE)
class MonthlyAdReport(TimeSeriesModel):
TIMESERIES_INTERVAL = timedelta(days=28)
ad = models.ForeignKey(Ad, related_name='monthlyreports')
avg_view_growth = models.FloatField()
avg_click_growth = models.FloatField()
def ad_data_collector(queryset):
"""
should return an iterable that yields dictionaries of data
needed to successfully create a RawAdData instance
"""
return ...
def report_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()
>>> print ad.latest_rawaddata, ad.latest_monthlyreports
TimeSeries QuerySet 方法
timeseries.utils.TimeSeriesQuerySet
向 Django QuerySet API 添加了 4 个主要方法,可用于更新和维护时间序列数据。这些方法包括
prefetch_latest
filter_outdated
last_updated
update_timeseries
update_timeseries
输入: related_name, collector, 可选 force
输出: 实例化的相关模型列表。
使用“collector”可调用对象更新查询集的相关模型表(由 related_name 给出)。
“collector”必须接受一个引用模型的查询集作为其唯一参数。它还必须返回一个字典的可迭代对象,这些字典可以用于构造和保存相关模型的实例。
注意:除非显式使用“force”关键字参数强制,否则只有具有过时数据的实例将被更新。
filter_outdated
输入: *related_names
输出: 查询集
返回一个查询集,该查询集将生成与通过指定的 related_name 给出的反向相关模型关联的“过时”数据的相关模型实例。
last_updated
输入: *related_names
输出: 查询集
将最新相关实例的创建时间戳注释为反向关系的 related_name。
用法
ad = Ad.objects.last_updated('rawdata').first()
# assuming there's data related to ad
print ad.rawdata_last_updated
# this will print the timestamp of when the associated data was
# last updated
prefetch_latest
输入: *related_names
输出: 查询集
公开最新的关联反向关系。
用法
ad = Ad.objects.prefetch_latest('rawdata', 'monthlyreports').first()
print ad.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 实例
构建一个 django.db.models.Q 实例,允许查询针对最新关联的反向关系。
注意:此方法旨在与 timeseries.utils.TimeSeriesQuerySet.last_updated 一起使用。
用法
Ad.objects.last_updated('rawdata').filter(
LatestQ('rawdata', views__gt=1000)
)
项目详情
django-timeseries-1.0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d0d9b84b65e1198d6d8b521fc634868f5b77a498716ff9ac22baff82095a3517 |
|
MD5 | 3a35cbd240e605d8591fd03fa402b9c7 |
|
BLAKE2b-256 | 86bef2b94d994f8f1074dafce509e0b19970cc3d1b4953e7ce13b98d6022852f |