I'm not sure of the proper way to link to previous discussions (or indeed if I am even the hapless user that Michael was referring to!), but this sounds like what Michael was talking about for reference:
https://groups.google.com/d/topic/sqlalchemy/ETFlrQrmdHk/discussion On Saturday, February 23, 2013 11:19:57 AM UTC-5, Michael Bayer wrote: > > > On Feb 23, 2013, at 1:13 AM, Eric Rasmussen > <ericra...@gmail.com<javascript:>> > wrote: > > But that's just a long-winded way to express a reduce operation*, so for > your example you could also write: > > import sqlalchemy as sa > > criteria = (('male', 35), ('female', 35)) > Useraccount = model.Useraccount > query = session.query(Useraccount) > ands = [sa.and_(Useraccount.gender == gender, Useraccount.age == age) > for > gender, age in criteria] > or_clauses = reduce(sa.or_, ands) > query = query.filter(or_clauses) > > > > this is fine but I'd make one offhand note that nesting the conjunctions, > i.e. or_(or_(or_(or_(x, y), z), q), b) has the effect of the compiler > traversing it in a deep recursion loop, if you're using a lot of values > (like, hundreds). We had a user getting recursion overflows due to this. > I illustrated a compiler plug in for this user that did a non-recursive > "unwrap" of the nested structure first before passing it down to the > default compiler, which isn't built in because it adds a good chunk of > performance overhead to all conjunctions. Ultimately he went with doing > or_(*everything) instead of his original approach of "x |= (y), x |= (q)" > etc. > > > -- 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.