Django PostgreSQL:填写范围内的缺失日期
我有一个表,其中一列是日期.每个日期可以有多个条目.
date ..... ----------- ----- 2015-07-20 .. 2015-07-20 .. 2015-07-23 .. 2015-07-24 .. 我想使用Django ORM和PostgreSQL作为数据库后端,以下面的形式获取数据: date count(date) ----------- ----------- 2015-07-20 2 2015-07-21 0 (missing after aggregation) 2015-07-22 0 (missing after aggregation) 2015-07-23 1 2015-07-24 1 对应的PostgreSQL查询: WITH RECURSIVE date_view(start_date,end_date) AS ( VALUES ('2015-07-20'::date,'2015-07-24'::date) UNION ALL SELECT start_date::date + 1,end_date FROM date_view WHERE start_date < end_date ) SELECT start_date,count(date) FROM date_view LEFT JOIN my_table ON date=start_date GROUP BY date,start_date ORDER BY start_date ASC; 我将此原始查询转换为Django ORM查询时遇到问题. 如果有人可以使用PostgreSQL作为数据库后端,使用/不使用公用表表达式的解决方法来提供样本ORM查询,那将是很棒的. 引用here的简单原因是:
根据this answer,django本身不支持CTE,但答案似乎已经过时了. 参考文献: > MySQL: Select All Dates In a Range Even If No Records Present 谢谢 解决方法
我不认为你可以用纯Django ORM做到这一点,我甚至不确定这是否可以用
extra()完成.Django ORM在处理通常的东西方面非常好,但对于更复杂的SQL语句和要求,更多因此,对于DBMS特定的实现,它还没有完全实现.您可能必须降低到
executing raw SQL directly,或者卸载应用程序层要执行的要求.
您总是可以使用Python生成缺少的日期,但如果元素的范围和数量很大,那将会非常慢.如果这是AJAX请求其他用途(例如图表),那么您可以将其卸载到Javascript. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |