summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2020-08-07 12:32:50 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2020-08-07 12:32:50 -0400
commit7f52c10357cbc98e467f317128b3fea2018eaf7c (patch)
tree1da41dee1fac72034fd6e47a407de4850c225d5f
parent9a3fee2cb6b608eb5c0263cf5a7e9085f74f2e73 (diff)
downloadsqlalchemy-7f52c10357cbc98e467f317128b3fea2018eaf7c.tar.gz
Include bulk update/delete in RoutingSession example
Fixes: #5407 Change-Id: Ia0965dbc88d744cded5c23021898388f2cf95f8d
-rw-r--r--doc/build/orm/persistence_techniques.rst6
1 files changed, 4 insertions, 2 deletions
diff --git a/doc/build/orm/persistence_techniques.rst b/doc/build/orm/persistence_techniques.rst
index 226b31837..ffafe9295 100644
--- a/doc/build/orm/persistence_techniques.rst
+++ b/doc/build/orm/persistence_techniques.rst
@@ -706,7 +706,8 @@ More comprehensive rule-based class-level partitioning can be built by
overriding the :meth:`.Session.get_bind` method. Below we illustrate
a custom :class:`.Session` which delivers the following rules:
-1. Flush operations are delivered to the engine named ``leader``.
+1. Flush operations, as well as bulk "update" and "delete" operations,
+ are delivered to the engine named ``leader``.
2. Operations on objects that subclass ``MyOtherClass`` all
occur on the ``other`` engine.
@@ -723,6 +724,7 @@ a custom :class:`.Session` which delivers the following rules:
'follower2':create_engine("sqlite:///follower2.db"),
}
+ from sqlalchemy.sql import Update, Delete
from sqlalchemy.orm import Session, sessionmaker
import random
@@ -730,7 +732,7 @@ a custom :class:`.Session` which delivers the following rules:
def get_bind(self, mapper=None, clause=None):
if mapper and issubclass(mapper.class_, MyOtherClass):
return engines['other']
- elif self._flushing:
+ elif self._flushing or isinstance(clause, (Update, Delete)):
return engines['leader']
else:
return engines[