- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表,其中一列为 date
。每个日期可以有多个条目。
date .....
----------- -----
2015-07-20 ..
2015-07-20 ..
2015-07-23 ..
2015-07-24 ..
我想使用以 PostgreSQL 作为数据库后端的 Django ORM 获取以下形式的数据:
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
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 查询时遇到问题。
如果有人可以提供一个示例 ORM 查询,有/没有针对使用 PostgreSQL 作为数据库后端的通用表表达式的解决方法。
引用的原因很简单here :
My preference is to do as much data processing in the database, short of really involved presentation stuff. I don't envy doing this in application code, just as long as it's one trip to the database
根据 this answer django 本身不支持 CTE,但答案似乎已经过时了。
引用资料:
谢谢
最佳答案
我不认为你可以用纯 Django ORM 做到这一点,我什至不确定这是否可以用 extra() 巧妙地完成。 . Django ORM 在处理常见问题方面非常出色,但对于更复杂的 SQL 语句和要求,尤其是 DBMS 特定实现,它还不够好。您可能必须向下移动到 executing raw SQL directly ,或卸载由应用层完成的要求。
您始终可以使用 Python 生成缺失的日期,但如果元素的范围和数量很大,那将非常慢。如果 AJAX 请求将其用于其他用途(例如图表),那么您可以将其卸载到 Javascript。
关于 Django + PostgreSQL : Fill missing dates in a range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682737/
我是一名优秀的程序员,十分优秀!