Ank*_*pli 7 django postgresql django-orm django-queryset django-1.8
我有一个表,其中一列为date. 每个日期可以有多个条目。
date .....
----------- -----
2015-07-20 ..
2015-07-20 ..
2015-07-23 ..
2015-07-24 ..
Run Code Online (Sandbox Code Playgroud)
我想使用 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
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
我无法将此原始查询转换为 Django ORM 查询。
如果有人可以为使用 PostgreSQL 作为数据库后端的公共表表达式提供带有/不带有变通方法的示例 ORM 查询,那就太好了。
我的偏好是在数据库中进行尽可能多的数据处理,而不是真正涉及的演示内容。我不羡慕在应用程序代码中这样做,只要它是到数据库的一次旅行
根据this answer django本身不支持CTE,但答案似乎已经过时了。
参考:
谢谢
我不认为你可以用纯 Django ORM 来做到这一点,而且我什至不确定这是否可以用extra()巧妙地完成。Django ORM 在处理日常事务方面非常出色,但对于更复杂的 SQL 语句和需求,尤其是 DBMS 特定的实现,它还不够成熟。您可能必须进一步深入直接执行原始 SQL,或者将该要求转移到应用程序层来完成。
您始终可以使用 Python 生成缺失的日期,但如果元素的范围和数量很大,那么速度会非常慢。如果 AJAX 请求此信息用于其他用途(例如图表),那么您可以将其卸载到 Javascript。
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |