summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/strategies.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/orm/strategies.py')
-rw-r--r--lib/sqlalchemy/orm/strategies.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py
index 82f40ea3b..8e8242c66 100644
--- a/lib/sqlalchemy/orm/strategies.py
+++ b/lib/sqlalchemy/orm/strategies.py
@@ -2380,7 +2380,12 @@ class SelectInLoader(AbstractRelationshipLoader, util.MemoizedSlots):
}
for key in chunk:
- related_obj = data[key]
+ # for a real foreign key and no concurrent changes to the
+ # DB while running this method, "key" is always present in
+ # data. However, for primaryjoins without real foreign keys
+ # a non-None primaryjoin condition may still refer to no
+ # related object.
+ related_obj = data.get(key, None)
for state, dict_, overwrite in our_states[key]:
if not overwrite and self.key in dict_:
continue
@@ -2430,6 +2435,8 @@ class SelectInLoader(AbstractRelationshipLoader, util.MemoizedSlots):
state, state_dict, collection[0]
)
else:
+ # note that empty tuple set on uselist=False sets the
+ # value to None
state.get_impl(self.key).set_committed_value(
state, state_dict, collection
)