我想在sqlalchemy中生成这个查询。数据库中存在表'demande‘。有一个使用generate_series函数生成时间步长的子查询。
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子句来加入。我猜这是由子查询引起的。
如果我试图“反转”查询,它可以工作,但它做了一个‘左外部连接’:
q = session.query(
func.count(Demande.id),
stmt.c.timestep).
outerjoin((stmt, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)由于sqlalchemy中没有正确的外连接,所以我只想找到一种方法,将子查询作为第一个表,并将“demande”表作为第二个表。这样我就可以使用左外部连接了。
发布于 2010-10-20 23:09:17
下面的例子应该会给你一个提示(假设我正确地猜到Demande是声明性模型):
joined = stmt.outerjoin(Demande.__table__, Demande.grouped==stmt.c.timestep)
q = session.query(stmt.c.timestep, func.count(Demande.id)).\
select_from(joined).\
group_by(stmt.c.timestep)https://stackoverflow.com/questions/3318203
复制相似问题