我需要按日期对项目进行分组和计数。我在带有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提供工作查询?
答案 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。