On 02/21/2013 07:31 PM, Jonathan Vanasco wrote:
> basd on a bunch of error messages, this example works...
>
> criteria = ( ('male',35),('female','35) )
> query = session.query( model.Useraccount )
> ands = []
> for set_ in criteria :
> ands.append(\
> sqlalchemy.sql.expression.and_(\
> model.Useraccoun.gender == set_[0] ,
> model.Useraccoun.age == set_[1] ,
> )
> )
> query = query.filter(\
> sqlalchemy.sql.expression.or_( *ands )
> )
> results= query.all()
>
> this seems really awkward though. is there a better way to build up a
> set of dynamic "or" criteria ?
>
For this specific case, if your database supports it, you can use the
tuple_ construct:
criteria = (('male', 35), ('female', 35))
query = session.query(model.Useraccount)
query = query.filter(sa.tuple_(model.Useraccount.gender,
model.Useraccount.age).in_(criteria))
results = query.all()
It's cleaner and should give better index usage.
-Conor
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.