Thanks! That solved it.

I'm a JOIN newbie, so I didn't realize left join and outer join were the 
same thing.

J.



On Monday, August 3, 2015 at 5:08:44 PM UTC+2, Ladislav Lenart wrote:
>
> Hello. 
>
> pgAdmin query uses LEFT JOIN whereas SQLAlchemy query uses (inner) JOIN. 
> Replace 
> .join(...) with .outerjoin(...) in your SQLAlchemy query. 
>
> HTH, 
>
> Ladislav Lenart 
>
>
> On 3.8.2015 16:48, [email protected] <javascript:> wrote: 
> > I am using Python 2.7, SQLAlchemy 0.9.3, and PostgreSQL 9.4. 
> > 
> > This: 
> > 
> > session.query(self.db.recording_table.c.id).\ 
> >     join(self.db.frame_table, self.db.recording_table.c.id == 
> self.db.frame_table.c.recording_id).\ 
> >     group_by(self.db.recording_table.c.id).\ 
> >     having(func.coalesce(func.count(self.db.frame_table.c.frame_nr), 0) 
> < 2).\ 
> >     all() 
> > 
> > 
> > generates the following SQL: 
> > 
> > SELECT recordings.id AS recordings_id 
> > FROM recordings JOIN recording_frames ON recordings.id = 
> > recording_frames.recording_id GROUP BY recordings.id 
> > HAVING coalesce(count(recording_frames.frame_nr), %(param_1)s) < 
> %(coalesce_1)s 
> > {'param_1': 0, 'coalesce_1': 2} 
> > 
> > and returns an empty list. 
> > 
> > If I execute this in pgAdmin: 
> > 
> > SELECT recordings.id 
> > FROM recordings 
> > LEFT JOIN recording_frames 
> > ON recordings.id = recording_frames.recording_id 
> > GROUP BY recordings.id 
> > HAVING (coalesce(count(recording_frames.frame_nr), 0) < 2) 
> > 
> > I get a list with 2 IDs in the recordings table, which is the expected 
> result. 
> > 
> > I have no idea why SQLAlchemy won't give me the same result. If I change 
> the 
> > criterion to > 0 I get the same result as with raw SQL. It seems 
> SQLAlchemy, 
> > with the code above, somehow filters out the rows where COUNT returns 
> nothing, 
> > despite the COALESCE. 
> > 
> > What am I doing wrong? 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to