this would even be easier (and correcter if the terms contain "%") written as:
cond = or_(*[Fruit.name.contains(term) for term in terms]) On 8 mei, 21:59, Kyle Schaffrick <k...@raidi.us> wrote: > 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 -~----------~----~----~----~------~----~------~--~---