summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/session.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-11-02 17:58:20 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-11-02 17:58:20 +0000
commit4161271a8c44c2392d8fc09a91391d6b0619dc9c (patch)
tree81b2fc5288690bd0c453f9d35518f74a485adecd /lib/sqlalchemy/orm/session.py
parentceb782ba49f494c5aca0c31a60f77d87373ae2ea (diff)
downloadsqlalchemy-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.py9
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