gpt4 book ai didi

Django + PostgreSQL : Fill missing dates in a range

转载 作者:行者123 更新时间:2023-11-29 11:37:35 25 4
gpt4 key购买 nike

我有一个表,其中一列为 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

对应的 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 查询时遇到问题。

如果有人可以提供一个示例 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com