From: Tony Mack Date: Sat, 17 Nov 2012 01:02:28 +0000 (-0500) Subject: fix sql filtering on list values X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=c92125cb713d6c72ee550eeedd22b14978a69e87;p=plcapi.git fix sql filtering on list values --- diff --git a/PLC/Storage/AlchemyObject.py b/PLC/Storage/AlchemyObject.py index 4ddcba6..d99a227 100644 --- a/PLC/Storage/AlchemyObject.py +++ b/PLC/Storage/AlchemyObject.py @@ -81,5 +81,17 @@ class AlchemyObj(Record): 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)