summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/session.py10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py
index 6ecef17f1..5488c3031 100644
--- a/lib/sqlalchemy/orm/session.py
+++ b/lib/sqlalchemy/orm/session.py
@@ -1912,7 +1912,10 @@ class Session(_SessionClassMethods):
"all changes on mapped instances before merging with "
"load=False.")
key = mapper._identity_key_from_state(state)
- key_is_persistent = attributes.NEVER_SET not in key[1]
+ key_is_persistent = attributes.NEVER_SET not in key[1] and (
+ not _none_set.intersection(key[1]) or
+ (mapper.allow_partial_pks and not _none_set.issuperset(key[1]))
+ )
else:
key_is_persistent = True
@@ -1933,10 +1936,7 @@ class Session(_SessionClassMethods):
self._update_impl(merged_state)
new_instance = True
- elif key_is_persistent and (
- not _none_set.intersection(key[1]) or
- (mapper.allow_partial_pks and
- not _none_set.issuperset(key[1]))):
+ elif key_is_persistent:
merged = self.query(mapper.class_).get(key[1])
else:
merged = None