[sqlalchemy] Re: ORM and EXISTS?

2009-09-14 Thread Seppo11

On 11 Sep., 22:12, Conor conor.edward.da...@gmail.com wrote:
 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)))

Great! Works like a charm!

Thank you!
  seppo

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[sqlalchemy] Re: ORM and EXISTS?

2009-09-11 Thread Conor

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
-~--~~~~--~~--~--~---