6
我想在sqlalchemy中生成這個查詢。數據庫中存在'demande'表。有一個使用generate_series函數生成時間步長的子查詢。如何在sqlalchemy中生成此查詢?
SELECT
timesteps.timestep AS timestep, d.count AS count
FROM
(SELECT
DATE_TRUNC('hour',date_demande) AS timestep,
COUNT(id) AS count
FROM
demande
GROUP BY
timestep
) AS d
RIGHT OUTER JOIN
(SELECT
timestep
FROM
generate_series('2010-01-01 00:00:00'::timestamp,
'2010-01-01 23:59:59'::timestamp,
'1 hour'::interval) AS timestep
) AS timesteps
ON d.timestep = timesteps.timestep
ORDER BY timestep;
我已經試過這樣:
stmt = session.query(
func.
generate_series(
datetime.datetime(2010,1,1,0,0,0),
datetime.datetime(2010,1,1,23,59,59),
cast('1 hour',Interval())).
label('timestep')
).subquery()
print stmt
q = session.query(
stmt.c.timestep,
func.count(Demande.id)).
outerjoin((Demande, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)
print q
但它與InvalidRequesError抱怨:找不到FROM子句從加盟。我想這是由子查詢造成的。
,如果我嘗試「反轉」的查詢,它的工作原理,但它確實「LEFT OUTER JOIN」:
q = session.query(
func.count(Demande.id),
stmt.c.timestep).
outerjoin((stmt, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)
由於沒有右外中SQLAlchemy的JOIN,我只是想找到一種方法將子查詢作爲第一個表格,將「demande」表格作爲第二個表格。這樣,我就可以使用LEFT OUTER JOIN
我要試試這個,明天在工作中,感謝你的回答,看起來不錯 – 2010-10-25 19:53:01
好的,你已經學會了一些東西,但我仍然需要努力去實現我所期待的。不管怎麼說,還是要謝謝你 – 2010-10-26 08:05:16