From fffa633e8480a7b087b3189c866fd4faf22f6c30 Mon Sep 17 00:00:00 2001 From: Brett Beaudoin Date: Thu, 6 Jun 2013 17:23:52 -0600 Subject: [PATCH] Added support for "IN" operator of a WHERE clause. The table update only allowed for "==" operator as in: UPDATE mytable SET foo = 'bar' WHERE id = 123; Now allows for "IN" operator as in: UPDATE mytable SET foo = 'bar' WHERE id IN (123, 876); This required changes to the "_args_to_clause" and "update" functions. --- dataset/persistence/table.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dataset/persistence/table.py b/dataset/persistence/table.py index fac32a6..c138fee 100644 --- a/dataset/persistence/table.py +++ b/dataset/persistence/table.py @@ -121,6 +121,13 @@ class Table(object): if not len(keys): return False clause = [(u, row.get(u)) for u in keys] + """ + Don't update the key itself, so remove any keys from the row dict + """ + for key in keys: + if key in row.keys(): + del row[key] + if ensure: self._ensure_columns(row, types=types) try: @@ -180,7 +187,10 @@ class Table(object): self._ensure_columns(args) clauses = [] for k, v in args.items(): - clauses.append(self.table.c[k] == v) + if isinstance(v, list) or isinstance(v, tuple): + clauses.append(self.table.c[k].in_(v)) + else: + clauses.append(self.table.c[k] == v) return and_(*clauses) def create_column(self, name, type):