From 3238d953b42f67761dc3019bd27f2960ae2e525f Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 8 Jul 2019 10:42:20 -0400 Subject: Ensure .engine is part of Connectable interface, implement as descriptor Fixed bug where using reflection function such as :meth:`.MetaData.reflect` with an :class:`.Engine` object that had execution options applied to it would fail, as the resulting :class:`.OptionEngine` proxy object failed to include a ``.engine`` attribute used within the reflection routines. Fixes: #4754 Change-Id: I6c342af5c6db6fe362b9d25f3f26d6859f62f87a --- lib/sqlalchemy/engine/base.py | 5 ++++- lib/sqlalchemy/engine/interfaces.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 7aee1a73b..07d1b8f89 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -1899,13 +1899,16 @@ class Engine(Connectable, log.Identified): if logging_name: self.logging_name = logging_name self.echo = echo - self.engine = self log.instance_logger(self, echoflag=echo) if proxy: interfaces.ConnectionProxy._adapt_listener(self, proxy) if execution_options: self.update_execution_options(**execution_options) + @property + def engine(self): + return self + def update_execution_options(self, **opt): r"""Update the default execution_options dictionary of this :class:`.Engine`. diff --git a/lib/sqlalchemy/engine/interfaces.py b/lib/sqlalchemy/engine/interfaces.py index 4806e72a5..aadadb845 100644 --- a/lib/sqlalchemy/engine/interfaces.py +++ b/lib/sqlalchemy/engine/interfaces.py @@ -1117,6 +1117,13 @@ class Connectable(object): """ + engine = None + """The :class:`.Engine` instance referred to by this :class:`.Connectable`. + + May be ``self`` if this is already an :class:`.Engine`. + + """ + @util.deprecated( "1.3", "The :meth:`.Engine.contextual_connect` and " -- cgit v1.2.1