From c92125cb713d6c72ee550eeedd22b14978a69e87 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Fri, 16 Nov 2012 20:02:28 -0500 Subject: [PATCH] fix sql filtering on list values --- PLC/Storage/AlchemyObject.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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) -- 2.43.0