Chcę wygenerować to zapytanie w sqlalchemy. Tabela "demande" istnieje w bazie danych. Istnieje podzapytanie, które generuje timesteps z funkcją generate_series.Jak wygenerować to zapytanie w 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;
Próbowałem to:
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
Ale narzeka z InvalidRequesError: nie udało się znaleźć klauzula FROM do przyłączenia się od. Przypuszczam, że jest to spowodowane przez podzapytanie.
jeśli staram się „odwrócić” kwerendy, to działa, ale to robi „LEFT OUTER JOIN”:
q = session.query(
func.count(Demande.id),
stmt.c.timestep).
outerjoin((stmt, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)
Ponieważ nie ma RIGHT OUTER JOIN w SQLAlchemy, po prostu chcę znaleźć sposób aby podzapytać jako pierwszą tabelę i tabelę "żądań" jako drugą. W ten sposób będę mógł korzystać z LEFT OUTER JOIN
muszę spróbować to jutro w pracy, Dziękuję za twoją odpowiedź, wydaje się miło –
OK, nauczyłeś się czegoś, ale nadal muszę nad tym pracować, aby osiągnąć to, czego szukam. Dzięki i tak –