def select(self, filter={}):
class Cls(object): pass
table = self.get_table()
- clsmapper = mapper(Cls, table)
- return dbsession.query(clsmapper).filter_by(**filter)
+ clsmapper = mapper(Cls, table)
+ # the easiest thing to do is pass the filter dict to the filter_by() method
+ # but filter_by doesn't support list values, so we will use filter() instead.
+ constraints = []
+ for (field, value) in filter.items():
+ if isinstance(value, list):
+ if value:
+ constraints.append(table.columns.get(field).in_(value))
+ else:
+ constraints.append(table.columns.get(field) == value)
+ if not constraints:
+ return dbsession.query(clsmapper)
+ else:
+ return dbsession.query(clsmapper).filter(*constraints)