diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-02-25 23:20:05 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-02-28 22:28:24 -0500 |
| commit | 04861dfd0e75e6fff3aa730bcad27f3172ae2fd8 (patch) | |
| tree | 7e4c2b038eb7f665584fdee345c1089079f0d93c /lib/sqlalchemy | |
| parent | dc615763d39916e9c037c7c376db1817cdf02764 (diff) | |
| download | sqlalchemy-04861dfd0e75e6fff3aa730bcad27f3172ae2fd8.tar.gz | |
disable all raiseload within the unit of work process.
The unit of work process now turns off all "lazy='raise'" behavior
altogether when a flush is proceeding. While there are areas where the UOW
is sometimes loading things that aren't ultimately needed, the lazy="raise"
strategy is not helpful here as the user often does not have much control
or visibility into the flush process.
Fixes: #5984
Change-Id: I23f2e332a5faa5c7c29823c9be9434d129676a5a
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/dependency.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/unitofwork.py | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/dependency.py b/lib/sqlalchemy/orm/dependency.py index 5a329b28c..85f6b68ff 100644 --- a/lib/sqlalchemy/orm/dependency.py +++ b/lib/sqlalchemy/orm/dependency.py @@ -229,6 +229,11 @@ class DependencyProcessor(object): if not isdelete or self.passive_deletes: passive = attributes.PASSIVE_NO_INITIALIZE elif self.direction is MANYTOONE: + # here, we were hoping to optimize having to fetch many-to-one + # for history and ignore it, if there's no further cascades + # to take place. however there are too many less common conditions + # that still take place and tests in test_relationships / + # test_cascade etc. will still fail. passive = attributes.PASSIVE_NO_FETCH_RELATED else: passive = attributes.PASSIVE_OFF diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index c293d90cb..1fb1c10ac 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -254,7 +254,9 @@ class UOWTransaction(object): history = impl.get_history( state, state.dict, - attributes.PASSIVE_OFF | attributes.LOAD_AGAINST_COMMITTED, + attributes.PASSIVE_OFF + | attributes.LOAD_AGAINST_COMMITTED + | attributes.NO_RAISE, ) if history and impl.uses_objects: state_history = history.as_state() @@ -266,7 +268,11 @@ class UOWTransaction(object): # TODO: store the history as (state, object) tuples # so we don't have to keep converting here history = impl.get_history( - state, state.dict, passive | attributes.LOAD_AGAINST_COMMITTED + state, + state.dict, + passive + | attributes.LOAD_AGAINST_COMMITTED + | attributes.NO_RAISE, ) if history and impl.uses_objects: state_history = history.as_state() |
