diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-02 17:58:20 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-02 17:58:20 +0000 |
| commit | 4161271a8c44c2392d8fc09a91391d6b0619dc9c (patch) | |
| tree | 81b2fc5288690bd0c453f9d35518f74a485adecd /lib/sqlalchemy/orm/session.py | |
| parent | ceb782ba49f494c5aca0c31a60f77d87373ae2ea (diff) | |
| download | sqlalchemy-4161271a8c44c2392d8fc09a91391d6b0619dc9c.tar.gz | |
- merge() includes a keyword argument "dont_load=True". setting this flag will cause
the merge operation to not load any data from the database in response to incoming
detached objects, and will accept the incoming detached object as though it were
already present in that session. Use this to merge detached objects from external
caching systems into the session.
Diffstat (limited to 'lib/sqlalchemy/orm/session.py')
| -rw-r--r-- | lib/sqlalchemy/orm/session.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 6be72ecef..30e97eba7 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -837,7 +837,7 @@ class Session(object): self._delete_impl(c, ignore_transient=True) - def merge(self, object, entity_name=None, _recursive=None): + def merge(self, object, entity_name=None, dont_load=False, _recursive=None): """Copy the state of the given `object` onto the persistent object with the same identifier. @@ -868,12 +868,17 @@ class Session(object): else: if key in self.identity_map: merged = self.identity_map[key] + elif dont_load: + merged = attribute_manager.new_instance(mapper.class_) + merged._instance_key = key + self.update(merged, entity_name=mapper.entity_name) + merged._state.committed_state = object._state.committed_state.copy() else: merged = self.get(mapper.class_, key[1]) if merged is None: raise exceptions.AssertionError("Instance %s has an instance key but is not persisted" % mapperutil.instance_str(object)) for prop in mapper.iterate_properties: - prop.merge(self, object, merged, _recursive) + prop.merge(self, object, merged, dont_load, _recursive) if key is None: self.save(merged, entity_name=mapper.entity_name) return merged |
