0

我需要按日期对项目进行分组和计数。我在 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 进行有效查询?

4

1 回答 1

1

如果您想要一个与数据库无关的查询,请不要使用 extra()。book = Books.objects.filter(state="new") .order_by('published_at', ) .values("published_at", ) .annotate(count=Count("published_at__day"))

访问 date__day (published_at__day) 失败:

FieldError:不允许加入字段“日期”。您是否将查找类型的“day”拼错了?

如果将Django 按月注释分组改写为按天分组。

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

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

Extract已确认可在 MySQL 和 PostgreSQL 上工作。

于 2013-09-30T22:35:51.337 回答