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, jurie.horne...@gmail.com 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 sqlalchemy+unsubscr...@googlegroups.com
> <mailto:sqlalchemy+unsubscr...@googlegroups.com>.
> To post to this group, send email to sqlalchemy@googlegroups.com
> <mailto:sqlalchemy@googlegroups.com>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.


-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to