跳转到主要内容

一个简化查询集聚合数据生成的Django微框架。

项目描述

django-qsstats的目标是成为一个微框架,使重复性任务,如生成查询集随时间变化的聚合统计变得容易。这可能对于当前任务来说有些过度,但微框架万岁!

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

需求

数据库

如果Django启用了时区支持,数据库也必须安装时区支持。对于MySQL,可能需要运行

::
  • mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

许可证

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》,将引发《DateFieldMissing》和《QuerySetMissing》异常。

qs

要操作的查询集。

默认值:None

date_field

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

默认值:None

aggregate

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

默认值:Count('id')

operator

用于《pivot》函数的默认操作符。也可以在调用《pivot》时设置。

默认值:'lte'

today

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

默认值:None

所有文档中的方法都接受一组标准的关键字参数,这些参数将覆盖《QuerySetStats》对象中已存储的任何信息。这些关键字参数是《date_field》和《aggregate》。

一旦实例化了一个《QuerySetStats》对象,就可以使用以下方法接收单个聚合结果

  • for_minute

  • for_hour

  • for_day

  • for_week

  • for_month

  • for_year

    位置参数:`dt`,一个《datetime.datetime》或《datetime.date》对象,用于将查询集过滤到这个区间(分钟、小时、天、周、月或年)。

  • this_minute

  • this_hour

  • this_day

  • this_week

  • this_month

  • this_year

    这是对《for_`的包装,使用《dateutil.relativedelta》提供当前区间的聚合信息。

《QuerySetStats》还提供了一个方法来返回聚合的时间序列数据,这可能在对数据进行绘图时非常有用。

time_series

位置参数:`start`和`end`,每个都是一个《datetime.date》或《datetime.datetime》对象,用于标记时间序列数据的开始和结束。

关键字参数:除了标准的《date_field》和《aggregate》关键字参数外,《time_series》还接受一个可选的《interval》关键字参数,用于标记在计算《start》和《end》之间的聚合数据时使用哪个区间。此参数默认为`'days'`,可以接受`'years'`、`'months'`、`'weeks'`、`'days'`、`'hours'`或`'minutes'`。否则将引发《InvalidInterval》。

此方法返回一个元组列表。每个元组的第一个元素是当前区间的《datetime.datetime》对象。第二个元素是聚合操作的结果。例如

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

日期信息的格式化留给用户练习,并且可能取决于使用的区间。

until

提供到给定日期或时间的聚合信息,使用《lte》过滤查询集。

位置参数:`dt`,一个《datetime.date》或《datetime.datetime》对象,用于过滤查询集从。

关键字参数:`date_field`,`aggregate`。

until_now

提供到现在的聚合信息。

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

关键字参数:`date_field`,`aggregate`。

after

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

位置参数:`dt`,一个《datetime.date》或《datetime.datetime》对象,用于过滤查询集从。

关键字参数:`date_field`,`aggregate`。

after_now

现在之后的聚合信息。

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

关键字参数:`date_field`,`aggregate`。

pivot

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

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

关键字参数:operatordate_fieldaggregate

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

Testing

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

要针对不同的 Python、DB 和 Django 版本进行测试,请安装 tox(pip install tox)并从源代码签出运行 'tox'。

$ tox

Db用户 'qsstats_test',密码 'qsstats_test' 和数据库 'qsstats_test' 应该存在。

与 django-qsstats 的区别

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

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

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

  4. start_dateend_date 参数因 3 而被重命名为 startend

  5. 内部结构已更改。

我不知道原始作者(Matt Croydon)是否希望我的更改,所以我现在将项目重命名。如果更改将被合并,那么 django-qsstats-magic 将变得过时。

项目详情


下载文件

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

源代码分布

django-qsstats-magic-1.1.0.tar.gz (8.6 kB 查看哈希值)

上传时间 源代码

支持者