Django:按天分组和计数

时间:2013-09-30 21:59:41

标签: mysql django sqlite postgresql

我需要按日期对项目进行分组和计数。我在带有followint的sqlite上得到了它:

Books.objects.filter(state="new").extra({"published_at": "date(published_at)"}).values("published_at").annotate(counter=Count("pk"))

但是使用带有sql语句的extra()无法在其他dbms上移植。例如,上面的内容不适用于mysql。 我如何才能为sqlite,postgresql和mysql提供工作查询?

1 个答案:

答案 0 :(得分:1)

如果您想要数据库不可知查询,请不要使用extra()。     books = Books.objects.filter(state =“new”)          .order_by('published_at',)          .values(“published_at”,)          .annotate(计数=计数( “published_at__day”))

访问date__day(published_at__day)失败,并显示:

  

FieldError:不允许加入字段'date'。你拼错了'天'吗?   对于查找类型?

如果按日重写Django annotate groupings by month进行分组。

Book.objects.all().extra(select={'day': 'extract( day from date )'}).values('day').annotate(num=Count('date')).order_by()

您可能希望将.all()替换为.filter(year = some_year),因为这将跨越多年。

Extract已确认适用于MySQL和PostgreSQL。

相关问题