diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2021-09-22 03:25:12 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2021-09-22 03:25:12 +0000 |
| commit | a162c1d714fe16fefb5da11981a4e788ca195d6a (patch) | |
| tree | 2439a3e12e42b042c1d1315eb526bb9fa48833fe /lib/sqlalchemy/sql | |
| parent | e76f1b14b972a43fa8e1fa19c39b5cf0505d2762 (diff) | |
| parent | e1f316fe7f51671c1eca8ebfacf4267b2bb0a44c (diff) | |
| download | sqlalchemy-a162c1d714fe16fefb5da11981a4e788ca195d6a.tar.gz | |
Merge "coerce for multivalues keys"
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/base.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/crud.py | 27 |
2 files changed, 26 insertions, 7 deletions
diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py index d998e8e5c..a6870f8d4 100644 --- a/lib/sqlalchemy/sql/base.py +++ b/lib/sqlalchemy/sql/base.py @@ -121,7 +121,11 @@ def _exclusive_against(*names, **kw): ] @util.decorator - def check(fn, self, *args, **kw): + def check(fn, *args, **kw): + # make pylance happy by not including "self" in the argument + # list + self = args[0] + args = args[1:] for name, getter, default_ in getters: if getter(self) is not default_: msg = msgs.get( diff --git a/lib/sqlalchemy/sql/crud.py b/lib/sqlalchemy/sql/crud.py index d43f33ebb..a9c9cb4c1 100644 --- a/lib/sqlalchemy/sql/crud.py +++ b/lib/sqlalchemy/sql/crud.py @@ -119,7 +119,7 @@ def _get_crud_params(compiler, stmt, compile_state, **kw): # special logic that only occurs for multi-table UPDATE # statements if compile_state.isupdate and compile_state.is_multitable: - _get_multitable_params( + _get_update_multitable_params( compiler, stmt, compile_state, @@ -172,7 +172,12 @@ def _get_crud_params(compiler, stmt, compile_state, **kw): if compile_state._has_multi_parameters: values = _extend_values_for_multiparams( - compiler, stmt, compile_state, values, kw + compiler, + stmt, + compile_state, + values, + _column_as_key, + kw, ) elif ( not values @@ -842,7 +847,7 @@ def _process_multiparam_default_bind(compiler, stmt, c, index, kw): return _create_update_prefetch_bind_param(compiler, col, **kw) -def _get_multitable_params( +def _get_update_multitable_params( compiler, stmt, compile_state, @@ -918,15 +923,25 @@ def _get_multitable_params( compiler.postfetch.append(c) -def _extend_values_for_multiparams(compiler, stmt, compile_state, values, kw): +def _extend_values_for_multiparams( + compiler, + stmt, + compile_state, + values, + _column_as_key, + kw, +): values_0 = values values = [values] for i, row in enumerate(compile_state._multi_parameters[1:]): extension = [] + + row = {_column_as_key(key): v for key, v in row.items()} + for (col, col_expr, param) in values_0: - if col in row or col.key in row: - key = col if col in row else col.key + if col.key in row: + key = col.key if coercions._is_literal(row[key]): new_param = _create_bind_param( |
