diff options
| -rw-r--r-- | doc/build/changelog/unreleased_14/7457.rst | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 23 |
2 files changed, 25 insertions, 9 deletions
diff --git a/doc/build/changelog/unreleased_14/7457.rst b/doc/build/changelog/unreleased_14/7457.rst new file mode 100644 index 000000000..b1942b0ea --- /dev/null +++ b/doc/build/changelog/unreleased_14/7457.rst @@ -0,0 +1,11 @@ +.. change:: + :tags: bug, mariadb + :tickets: 7457 + + Corrected the error classes inspected for the "is_disconnect" check for the + ``mariadbconnector`` dialect, which was failing for disconnects that + occurred due to common MySQL/MariaDB error codes such as 2006; the DBAPI + appears to currently use the ``mariadb.InterfaceError`` exception class for + disconnect errors such as error code 2006, which has been added to the list + of classes checked. + diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index fef1ec81a..fe0624d08 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -2540,16 +2540,21 @@ class MySQLDialect(default.DefaultDialect): def is_disconnect(self, e, connection, cursor): if isinstance( - e, (self.dbapi.OperationalError, self.dbapi.ProgrammingError) + e, + ( + self.dbapi.OperationalError, + self.dbapi.ProgrammingError, + self.dbapi.InterfaceError, + ), + ) and self._extract_error_code(e) in ( + 1927, + 2006, + 2013, + 2014, + 2045, + 2055, ): - return self._extract_error_code(e) in ( - 1927, - 2006, - 2013, - 2014, - 2045, - 2055, - ) + return True elif isinstance( e, (self.dbapi.InterfaceError, self.dbapi.InternalError) ): |
