On Fri, 8 May 2009 12:52:09 -0700 (PDT)
Bryan <bryanv...@gmail.com> wrote:

> 
> I can't figure out a clean way of adding a bunch of filter terms to a
> query in a loop joined by an OR clause.  Successive calls to filter
> join the expressions by AND.  I would like to do something like the
> following, but have the expressions joined by OR
> 
> terms = ['apple', 'orange', 'peach']
> q = Session.query(Fruit)
> for term in terms:
>     q = q.filter(Fruit.name.like('%' + term + '%')
> 
> 
> Desired pseudo-sql:
> SELECT * FROM fruit WHERE name like '%apple%' OR name like '%orange%'
> OR name like '%peach%'
> 

I think this might do what you want:

  cond = or_(*[ Fruit.name.like('%' + term + '%') for term in terms ])
  q = Session.query(Fruit).filter(cond)

-Kyle

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