diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-11-10 11:08:52 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-11-10 11:08:52 -0500 |
| commit | 6a688b736429e27a892bc02111414491fe4103b0 (patch) | |
| tree | ee9b30305beaf4dafdaebadf4d459b75f2e0f139 /lib/sqlalchemy | |
| parent | b141f9f3c8c5c7348daff5aa2a30850c3bf673ba (diff) | |
| download | sqlalchemy-6a688b736429e27a892bc02111414491fe4103b0.tar.gz | |
Ensure attribute keys used for bulk update pk set
Fixed bug in :meth:`.Session.bulk_update_mappings` where an alternate-named
primary key attribute would not track properly into the UPDATE statement.
Change-Id: I33e9140f45827772768fa548adcfeb4dbfc2208d
Fixes: #3849
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/persistence.py | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 60848097c..87f2a24b0 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -2020,6 +2020,16 @@ class Mapper(InspectionAttr): ) @_memoized_configured_property + def _pk_attr_keys_by_table(self): + return dict( + ( + table, + frozenset([self._columntoproperty[col].key for col in pks]) + ) + for table, pks in self._pks_by_table.items() + ) + + @_memoized_configured_property def _server_default_cols(self): return dict( ( diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py index 2bc189c1d..bf51a2a83 100644 --- a/lib/sqlalchemy/orm/persistence.py +++ b/lib/sqlalchemy/orm/persistence.py @@ -522,7 +522,7 @@ def _collect_update_commands( (propkey_to_col[propkey]._label, state_dict.get(propkey)) for propkey in set(propkey_to_col). - intersection(mapper._pk_keys_by_table[table]) + intersection(mapper._pk_attr_keys_by_table[table]) ) else: pk_params = {} |
