diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-11-28 14:30:05 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-11-28 14:30:58 -0500 |
| commit | d2d60acdcbd4696567f8bdadc9b20014b2d25451 (patch) | |
| tree | c7afdb1b5b7e11024e6a69aebf2a31abfa7dd1fe /lib/sqlalchemy/sql/crud.py | |
| parent | 2aeda9bd21ebe2af0b29eca4edbedc3931678d8c (diff) | |
| download | sqlalchemy-d2d60acdcbd4696567f8bdadc9b20014b2d25451.tar.gz | |
- Added support for parameter-ordered SET clauses in an UPDATE
statement. This feature is available by passing the
:paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order`
flag either to the core :class:`.Update` construct or alternatively
adding it to the :paramref:`.Query.update.update_args` dictionary at
the ORM-level, also passing the parameters themselves as a list of 2-tuples.
Thanks to Gorka Eguileor for implementation and tests.
adapted from pullreq github:200
(cherry picked from commit c90f0a49f332867f6b337c79ddf192299788667f)
Diffstat (limited to 'lib/sqlalchemy/sql/crud.py')
| -rw-r--r-- | lib/sqlalchemy/sql/crud.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/crud.py b/lib/sqlalchemy/sql/crud.py index e6f16b698..1126134fc 100644 --- a/lib/sqlalchemy/sql/crud.py +++ b/lib/sqlalchemy/sql/crud.py @@ -208,7 +208,18 @@ def _scan_cols( implicit_return_defaults, postfetch_lastrowid = \ _get_returning_modifiers(compiler, stmt) - cols = stmt.table.columns + if stmt._parameter_ordering: + parameter_ordering = [ + _column_as_key(key) for key in stmt._parameter_ordering + ] + ordered_keys = set(parameter_ordering) + cols = [ + stmt.table.c[key] for key in parameter_ordering + ] + [ + c for c in stmt.table.c if c.key not in ordered_keys + ] + else: + cols = stmt.table.columns for c in cols: col_key = _getattr_col_key(c) |
