diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-03-24 13:58:20 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-03-24 13:59:02 -0400 |
| commit | 56366924673f88e51c74d94058c11132a057ecfa (patch) | |
| tree | 1d96a3c5f86b77f0879c2f6c3624653919400def /lib/sqlalchemy | |
| parent | c565c470517e1cc70a7f33d1ad3d3256935f1121 (diff) | |
| download | sqlalchemy-56366924673f88e51c74d94058c11132a057ecfa.tar.gz | |
more autocommit messaging
Further clarified connection-level logging to indicate the BEGIN, ROLLBACK
and COMMIT log messages do not actually indicate a real transaction when
the AUTOCOMMIT isolation level is in use; messaging has been extended to
include the BEGIN message itself, and the messaging has also been fixed to
accommodate when the :class:`.Engine` level
:paramref:`.create_engine.isolation_level` parameter was used directly.
Fixes: #7853
Change-Id: Iafc78070737ad117f84262e4bde84b81a81e4ea1
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 17 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/interfaces.py | 5 |
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 061794bde..6a79cdf02 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -925,9 +925,14 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): ) def _is_autocommit_isolation(self) -> bool: + opt_iso = self._execution_options.get("isolation_level", None) return bool( - self._execution_options.get("isolation_level", None) - == "AUTOCOMMIT" + opt_iso == "AUTOCOMMIT" + or ( + opt_iso is None + and self.engine.dialect._on_connect_isolation_level + == "AUTOCOMMIT" + ) ) def get_transaction(self) -> Optional[RootTransaction]: @@ -949,7 +954,13 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): def _begin_impl(self, transaction: RootTransaction) -> None: if self._echo: - self._log_info("BEGIN (implicit)") + if self._is_autocommit_isolation(): + self._log_info( + "BEGIN (implicit; DBAPI should not BEGIN due to " + "autocommit mode)" + ) + else: + self._log_info("BEGIN (implicit)") self.__in_begin = True diff --git a/lib/sqlalchemy/engine/interfaces.py b/lib/sqlalchemy/engine/interfaces.py index 1b178641e..aa75da614 100644 --- a/lib/sqlalchemy/engine/interfaces.py +++ b/lib/sqlalchemy/engine/interfaces.py @@ -677,9 +677,14 @@ class Dialect(EventTarget): """ + # NOTE: this does not take into effect engine-level isolation level. + # not clear if this should be changed, seems like it should default_isolation_level: Optional[_IsolationLevel] """the isolation that is implicitly present on new connections""" + # create_engine() -> isolation_level currently goes here + _on_connect_isolation_level: Optional[_IsolationLevel] + execution_ctx_cls: Type["ExecutionContext"] """a :class:`.ExecutionContext` class used to handle statement execution""" |
