This query will get you close to your desired SQL:
q = session.query(ATable)
q = q.filter(
    sa.exists(
        [1],
        ((BTable.atable_id == ATable.id)
         & (CTable.cval.in_(["foo", "bar"]))),
        from_obj=orm.join(BTable, CTable)))

Alternatively, you can add sqlalchemy.orm.relations (ATAble.btables
and BTable.ctables) to your classes and use:
q = session.query(ATable)
q = q.filter(ATable.btables.any(BTable.ctable.has(CTable.cval.in_
(["foo", "bar"]))))

This will generate another EXISTS clause instead of the join between
BTable and CTable, but in this case they are functionally the same.
The first query will usually be a bit faster.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to