diff options
Diffstat (limited to 'lib/sqlalchemy/orm/strategies.py')
-rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 9 |
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 ) |