diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/persistence.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/state.py | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py index ccdd6e81e..13747be8a 100644 --- a/lib/sqlalchemy/orm/persistence.py +++ b/lib/sqlalchemy/orm/persistence.py @@ -728,8 +728,8 @@ def _finalize_insert_update_commands(base_mapper, uowtransaction, # it isn't expired. toload_now = [] - if base_mapper.eager_defaults and state.unloaded: - toload_now.extend(state.unloaded) + if base_mapper.eager_defaults: + toload_now.extend(state._unloaded_non_object) elif mapper.version_id_col is not None and \ mapper.version_id_generator is False: prop = mapper._columntoproperty[mapper.version_id_col] diff --git a/lib/sqlalchemy/orm/state.py b/lib/sqlalchemy/orm/state.py index 35305dc79..2c947a7ac 100644 --- a/lib/sqlalchemy/orm/state.py +++ b/lib/sqlalchemy/orm/state.py @@ -393,6 +393,15 @@ class InstanceState(interfaces._InspectionAttr): difference(self.dict) @property + def _unloaded_non_object(self): + return self.unloaded.difference(self._uses_objects) + + @property + def _uses_objects(self): + return (attr for attr in self.manager + if self.manager[attr].impl.uses_objects) + + @property def expired_attributes(self): """Return the set of keys which are 'expired' to be loaded by the manager's deferred scalar loader, assuming no pending |
