我有一个像这样的简单模型:
class Order(models.Model):
created = model.DateTimeField(auto_now_add=True)
total = models.IntegerField() # monetary value
Run Code Online (Sandbox Code Playgroud)
我想逐个输出:
COUNT)SUM)我不确定攻击它的最佳方法是什么.我已经看到了一些相当可怕的额外选择查询,但我简单的想法告诉我,我可能会更好的只是迭代数字,从任意的开始年/月开始计算直到我到达当前月份,抛弃简单查询过滤该月份.更多数据库工作 - 减少开发人员的压
什么对你最有意义?有没有一种很好的方法可以撤回快速的数据表?或者我的脏方法可能是最好的主意?
我正在使用Django 1.3.不确定他们最近是否添加了更好的方式GROUP_BY.
我的问题与这篇文章几乎完全相同,只是我使用的是Python和Django而不是PHP.
任务是采取:
id date
1 2009-01-01 10:15:23
2 2009-01-01 13:21:29
3 2009-01-02 01:03:13
4 2009-01-03 12:20:19
5 2009-01-03 13:01:06
Run Code Online (Sandbox Code Playgroud)
并输出:
2009-01-01
1
2
2009-01-02
3
2009-01-03
4
5
Run Code Online (Sandbox Code Playgroud)
我可以通过循环排序日期并在我的python视图文件中将HTML输出到一个字符串来手动破解某些东西,但我想知道:有更好的方法使用Django模板或漂亮的Python功能吗?
我正在使用具有DateTimeField(auto_now_add = True)的类似文章来捕获发布日期(pub_date).这看起来类似于以下内容:
class Article(models.Model):
text = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我想做一个查询,计算每天添加多少篇文章帖子或条目.换句话说,我想查询条目并按日分组(最后是月,小时,秒等).这看起来类似于SQLite shell中的以下内容:
select pub_date, count(id) from "myapp_article"
where id = 1
group by strftime("%d", pub_date)
;
Run Code Online (Sandbox Code Playgroud)
返回的内容如下:
2012-03-07 18:08:57.456761|5
2012-03-08 18:08:57.456761|9
2012-03-09 18:08:57.456761|1
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚如何从Django QuerySet获得该结果.我知道如何使用itertools.groupby获得类似的结果,但在这种情况下这是不可能的(下面的解释).
此查询的最终结果将用于显示每天帖子数的图表中.我正在尝试使用Django Chartit包来实现这一目标.Chartit对数据源(DataPool)施加约束.源必须是Model,Manager或QuerySet,因此就我所知,使用itertools.groupby不是一个选项.
所以问题是...... 如何在白天对条目进行分组或聚合,最终得到QuerySet对象?
我试图按日期过滤用户,但直到我可以找到数据库中用户的第一个和最后一个日期.虽然我可以让我的脚本稍后过滤掉重复,但我想从一开始就使用Django来做,distinct因为它显着减少了.我试过了
User.objects.values('install_time').distinct().order_by()
Run Code Online (Sandbox Code Playgroud)
但既然install_time是a timestamp,它包括日期和时间(我并不在乎).因此,它过滤掉的唯一日期是我们可以检索多个用户的安装日期而不是时间的日期.
知道怎么做吗?我使用Django 1.3.1,Postgres 9.0.5和最新版本的psycopg2来运行它.
编辑:我忘了添加以下数据类型install_time:
install_time = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
编辑2:这是Postgres shell的一些示例输出,以及我想要的快速解释:
2011-09-19 00:00:00
2011-09-11 00:00:00
2011-09-11 00:00:00 <--filtered out by distinct() (same date and time)
2011-10-13 06:38:37.576
2011-10-13 00:00:00 <--NOT filtered out by distinct() (same date but different time)
Run Code Online (Sandbox Code Playgroud)
我知道Manager.raw,但宁愿用户django.db.connection.cursor直接编写查询,因为Manager.raw返回一个RawQuerySet,IMO,比手动编写SQL查询和迭代更糟糕.