summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2016-11-10 11:08:52 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2016-11-10 11:08:52 -0500
commit6a688b736429e27a892bc02111414491fe4103b0 (patch)
treeee9b30305beaf4dafdaebadf4d459b75f2e0f139 /lib/sqlalchemy
parentb141f9f3c8c5c7348daff5aa2a30850c3bf673ba (diff)
downloadsqlalchemy-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.py10
-rw-r--r--lib/sqlalchemy/orm/persistence.py2
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 = {}