diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 18 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategy_options.py | 3 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 2674b9c6f..567c09fff 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -208,10 +208,24 @@ class DeferredColumnLoader(LoaderStrategy): def setup_query(self, context, entity, path, loadopt, adapter, only_load_props=None, **kwargs): + if ( - loadopt and self.group and + ( + loadopt and + 'undefer_pks' in loadopt.local_opts and + set(self.columns).intersection(self.parent.primary_key) + ) + or + ( + loadopt and + self.group and loadopt.local_opts.get('undefer_group', False) == self.group - ) or (only_load_props and self.key in only_load_props): + ) + or + ( + only_load_props and self.key in only_load_props + ) + ): self.parent_property._get_strategy_by_cls(ColumnLoader).\ setup_query(context, entity, path, loadopt, adapter, **kwargs) diff --git a/lib/sqlalchemy/orm/strategy_options.py b/lib/sqlalchemy/orm/strategy_options.py index 317fc0813..eccb4f7f0 100644 --- a/lib/sqlalchemy/orm/strategy_options.py +++ b/lib/sqlalchemy/orm/strategy_options.py @@ -582,7 +582,8 @@ def load_only(loadopt, *attrs): {"deferred": False, "instrument": True} ) cloned.set_column_strategy("*", - {"deferred": True, "instrument": True}) + {"deferred": True, "instrument": True}, + {"undefer_pks": True}) return cloned @load_only._add_unbound_fn |
