Quiero generar esta consulta en sqlalchemy. La tabla 'demande' existe en la base de datos. Hay una subconsulta que genera los timesteps con la función generate_series.¿Cómo generar esta consulta en 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;
He intentado esto:
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
Pero se queja con un InvalidRequesError: No se pudo encontrar una cláusula FROM para unirse a. Supongo que esto es causado por la subconsulta.
si trato de "invertir" la consulta, que funciona, pero lo hace una 'combinación externa izquierda':
q = session.query(
func.count(Demande.id),
stmt.c.timestep).
outerjoin((stmt, grouped==stmt.c.timestep)).
group_by(stmt.c.timestep)
Como no hay RIGHT OUTER JOIN en sqlalchemy, sólo quiero encontrar una manera tomar la subconsulta como la primera tabla y la tabla 'demande' como la segunda. De esta manera podré usar LEFT OUTER JOIN
tengo que probar esto mañana en el trabajo, gracias por su respuesta, parece agradable –
OK, usted me ha aprendido algo, pero todavía tengo que trabajar en ello para lograr lo que estoy buscando. Gracias de cualquier manera –