we should probably add a method to Query called exists() that just turns any query into "EXISTS (SELECT 1)", here's how to make it work for now
from sqlalchemy import exists q1 = session.query(ImportedClientShare) q1 = q1.join(ImportedPartnerShare, ImportedClientShare.deal_id == ImportedPartnerShare.deal_id) q1 = q1.join(Deal, ImportedClientShare.deal_id == Deal.id) q1 = q1.filter( ImportedClientShare.client_id == client_id, ImportedPartnerShare.partner_id == partner_id, Deal.external_id != None, ) q2 = session.query(ClientShare) q2 = q2.join(PartnerShare, ClientShare.deal_id == PartnerShare.deal_id) q2 = q2.join(Deal, ClientShare.deal_id == Deal.id) q2 = q2.filter( ClientShare.client_id == client_id, PartnerShare.partner_id == partner_id, Deal.external_id == None, ) q = session.query(exists(q1.with_entities('1').statement) | exists(q2.with_entities('1').statement)) On Mar 1, 2013, at 7:41 AM, Ladislav Lenart <lenart...@volny.cz> wrote: > SELECT EXISTS( > SELECT 1 > FROM > imported_client_share > JOIN imported_partner_share ON imported_client_share.deal_id = > imported_partner_share.deal_id > JOIN deal ON imported_client_share.deal_id = deal.id > WHERE > imported_client_share.client_id = :client_id > AND imported_partner_share.partner_id = :partner_id > AND deal.external_id IS NULL > ) OR EXISTS( > SELECT 1 > FROM > client_share > JOIN partner_share ON client_share.deal_id = partner_share.deal_id > JOIN deal ON client_share.deal_id = deal.id > WHERE > client_share.client_id = :client_id > AND partner_share.partner_id = :partner_id > AND deal.external_id IS NULL > ) -- 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?hl=en. For more options, visit https://groups.google.com/groups/opt_out.