Skip to main content

一个 django 微框架,可以简化查询集的聚合数据的生成。

项目描述

django-qsstats 的目标是成为一个微框架,以简化重复性任务,例如随着时间的推移生成查询集的聚合统计信息。对于手头的任务来说,这可能是矫枉过正,但是微框架!

django-qsstats-magic 是对 django-qsstats 应用程序的重构,API 略有改变,内部结构简化,time_series 实现更快。

要求

执照

在 BSD 风格的许可下获得许可。

例子

今天有多少用户注册?这个月?今年?

from django.contrib.auth.models import User
import qsstats

qs = User.objects.all()
qss = qsstats.QuerySetStats(qs, 'date_joined')

print '%s new accounts today.' % qss.this_day()
print '%s new accounts this week.' % qss.this_week()
print '%s new accounts this month.' % qss.this_month()
print '%s new accounts this year.' % qss.this_year()
print '%s new accounts until now.' % qss.until_now()

这可能会打印出如下内容:

5 new accounts today.
11 new accounts this week.
27 new accounts this month.
377 new accounts this year.
409 new accounts until now.

聚合适合绘图的时间序列数据

from django.contrib.auth.models import User
import datetime, qsstats

qs = User.objects.all()
qss = qsstats.QuerySetStats(qs, 'date_joined')

today = datetime.date.today()
seven_days_ago = today - datetime.timedelta(days=7)

time_series = qss.time_series(seven_days_ago, today)
print 'New users in the last 7 days: %s' % [t[1] for t in time_series]

这可能会打印出如下内容:

New users in the last 7 days: [3, 10, 7, 4, 12, 9, 11]

请参阅 qsstats/tests.py 了解类似的使用示例。

API

QuerySetStats对象_

为了提供最大的灵活性,QuerySetStats对象可以用尽可能少或尽可能多的信息来实例化。所有关键字参数都是可选的,但如果您尝试使用QuerySetStats 而没有提供足够的信息,则会引发DateFieldMissingQuerySetMissing 。

qs

要操作的查询集。

默认值:

日期字段

要使用的查询集中的日期字段。

默认值:

总计的

django 聚合实例。也可以在实例化或调用其中一种方法时设置。

默认值:计数('id')

操作员

用于数据透视函数的默认运算符。也可以在调用pivot时设置。

默认值:'lte'

今天

将被视为今天日期的日期。如果今天的参数是 None QuerySetStats' 今天将是 datetime.date.today()。

默认值:

所有记录在案的方法都采用一组标准的关键字参数,这些参数覆盖已经存储在QuerySetStats 对象中的任何信息。这些关键字参数是date_fieldaggregate

实例化QuerySetStats对象后,您可以使用以下方法接收单个聚合结果:

  • for_minute

  • for_hour

  • for_day

  • for_week

  • for_month

  • for_year

    位置参数:dtdatetime.datetimedatetime.date 对象,用于将查询集过滤到此间隔(分钟、小时、日、周、月或年)。

  • 这分钟

  • 这个小时

  • 这天

  • 本星期

  • 这个月

  • 今年

    for_<interval>的包装器使用dateutil.relativedelta来提供此当前间隔的聚合信息。

QuerySetStats还提供了一种返回聚合时间序列数据的方法,该方法在绘制数据时可能非常有用:

时间序列

位置参数:startend,每个都是 datetime.datedatetime.datetime对象,用于标记时间序列数据的开始和停止。

关键字参数:除了标准的date_field聚合关键字参数之外,time_series 还采用一个可选的 间隔关键字参数,用于在计算startend之间的聚合数据时标记要使用的间隔。此参数默认为'days'并且可以接受'years''months''weeks''days''hours''minutes'。否则它将引发InvalidInterval

此方法返回一个元组列表。每个元组中的第一项是当前 inverval 的datetime.datetime对象。第二项是聚合操作的结果。例如:

[(datetime.datetime(2010, 3, 28, 0, 0), 12), (datetime.datetime(2010, 3, 29, 0, 0), 0), ...]

日期信息的格式留给用户作为练习,可能会因使用的时间间隔而异。

直到

在给定日期或时间之前提供聚合信息,使用lte过滤查询集。

位置参数:dt一个datetime.datedatetime.datetime 对象,用于过滤查询集以来。

关键字参数:date_fieldaggregate

到现在

汇总信息到现在。

位置参数:dt 用于过滤查询集的datetime.datedatetime.datetime对象(使用lte)。

关键字参数:date_fieldaggregate

在给定日期或时间之后聚合信息,使用gte过滤查询集。

位置参数:dt一个datetime.datedatetime.datetime 对象,用于过滤查询集以来。

关键字参数:date_fieldaggregate

after_now

现在汇总信息。

位置参数:dt 用于过滤查询集的datetime.datedatetime.datetime对象(使用gte)。

关键字参数:date_fieldaggregate

sinceafteruntil_now使用,但如果您想指定自己的运算符而不是默认值,则可能很有用。

位置参数:dt 用于过滤查询集的datetime.datedatetime.datetime对象(使用lte)。

关键字参数:operatordate_fieldaggregate

如果提供的运算符不是'lt''lte'gtgte之一,则引发InvalidOperator

测试

如果您想根据本地配置测试django-qsstats-magic,请将 qsstats添加到您的INSTALLED_APPS并运行./manage.py test qsstats。测试套件假定已安装django.contrib.auth

为了针对不同的 python、DB 和 django 版本进行测试,请安装 tox (pip install tox) 并从源结帐运行“tox”:

$ tox

应存在密码为“qsstats_test”的数据库用户“qsstats_test”和数据库“qsstats_test”。

与 django-qsstats 的区别

  1. 使用 1 个 sql 查询的更快 time_series 方法(目前适用于 MySQL 和 PostgreSQL,对于其他 DB 后端回退到旧方法)。

  2. 单个聚合参数而不是aggregate_fieldaggregate_class。默认值始终是Count('id'),不能在 settings.py 中指定。现在也不支持QUERYSETSTATS_DEFAULT_OPERATOR选项。

  3. 支持分钟和小时聚合。

  4. 由于 3, start_dateend_date参数被重命名为startend

  5. 内部结构发生了变化。

我不知道原作者 (Matt Croydon) 是否喜欢我的更改,所以我暂时重命名了一个项目。如果更改将被合并,那么 django-qsstats-magic 将变得过时。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

django-qsstats-magic-redux-0.7.3.tar.gz (9.0 kB 查看哈希)

已上传 source