gpt4 book ai didi

sql - 如何在 sqlalchemy 中生成此查询?

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

我想在 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 子句。我猜这是由子查询引起的。

如果我尝试“反转”查询,它会起作用,但它会执行“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中没有RIGHT OUTER JOIN,所以我只想想办法把子查询作为第一个表,'demande'表作为第二个。这样我就可以使用 LEFT OUTER JOIN

最佳答案

下面的例子应该会给你一个线索(假设我猜对了 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)

关于sql - 如何在 sqlalchemy 中生成此查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318203/

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