From 75be18004fac80de6aabea409c059eaaa0dd5244 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 11 Oct 2013 16:41:52 -0400 Subject: - fix bug due to regression from #2793, make sure we only go to load scalar attributes here and not relationships, else we get an error if there's no actual scalars to load --- lib/sqlalchemy/orm/persistence.py | 4 ++-- lib/sqlalchemy/orm/state.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy') 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 @@ -392,6 +392,15 @@ class InstanceState(interfaces._InspectionAttr): difference(self.committed_state).\ 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 -- cgit v1.2.1