diff options
author | Idan Kamara <idankk86@gmail.com> | 2012-12-06 00:12:16 +0200 |
---|---|---|
committer | Idan Kamara <idankk86@gmail.com> | 2012-12-06 00:12:16 +0200 |
commit | 20dd73f575f3d10d53cd68b09bb1c42049fc4211 (patch) | |
tree | e993024e7eb882ce5f877f49c1580b3e3e0ab62d /lib/sqlalchemy/sql/expression.py | |
parent | 65dd01233f757e70aa9c7a8b5f92386ac066a46c (diff) | |
download | sqlalchemy-20dd73f575f3d10d53cd68b09bb1c42049fc4211.tar.gz |
updatebase: add support for multi parameters
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
-rw-r--r-- | lib/sqlalchemy/sql/expression.py | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 3dc8dfea4..42d6393ed 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -5833,13 +5833,21 @@ class UpdateBase(HasPrefixes, Executable, ClauseElement): _prefixes = () def _process_colparams(self, parameters): - if isinstance(parameters, (list, tuple)): - pp = {} - for i, c in enumerate(self.table.c): - pp[c.key] = parameters[i] - return pp + def process_single(p): + if isinstance(p, (list, tuple)): + pp = {} + for i, c in enumerate(self.table.c): + pp[c.key] = p[i] + return pp + else: + return p + + if isinstance(parameters, (list, tuple)) and \ + isinstance(parameters[0], (list, tuple, dict)): + return process_single(parameters[0]), \ + [process_single(p) for p in parameters[1:]] else: - return parameters + return process_single(parameters), [] def params(self, *arg, **kw): """Set the parameters for the statement. @@ -5960,7 +5968,7 @@ class ValuesBase(UpdateBase): def __init__(self, table, values, prefixes): self.table = table - self.parameters = self._process_colparams(values) + self.parameters, self.multi_parameters = self._process_colparams(values) if prefixes: self._setup_prefixes(prefixes) @@ -5996,17 +6004,22 @@ class ValuesBase(UpdateBase): :func:`~.expression.update` - produce an ``UPDATE`` statement """ + if self.multi_parameters and kwargs: + assert False if args: v = args[0] else: v = {} if self.parameters is None: - self.parameters = self._process_colparams(v) + self.parameters, self.multi_parameters = self._process_colparams(v) self.parameters.update(kwargs) else: self.parameters = self.parameters.copy() - self.parameters.update(self._process_colparams(v)) + p, mp = self._process_colparams(v) + self.parameters.update(p) + for p in mp: + self.multi_parameters.update(p) self.parameters.update(kwargs) |