diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-09-15 08:42:34 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-09-15 08:42:34 -0400 |
| commit | 0ee7d693b805c0f1aea0da5ebc11ea6e52b42c71 (patch) | |
| tree | 5e02dfd91e339c646dad15f182a3e0937ccdcfc6 /lib/sqlalchemy/dialects | |
| parent | 310dd2e6a741c606e5be40ef35cac6ed63e10bfe (diff) | |
| download | sqlalchemy-0ee7d693b805c0f1aea0da5ebc11ea6e52b42c71.tar.gz | |
catch exception for system_views also
Fixed yet another regression in SQL Server isolation level fetch (see
:ticket:`8231`, :ticket:`8475`), this time with "Microsoft Dynamics CRM
Database via Azure Active Directory", which apparently lacks the
``system_views`` view entirely. Error catching has been extended that under
no circumstances will this method ever fail, provided database connectivity
is present.
Fixes: #8525
Change-Id: I76a429e3329926069a0367d2e77ca1124b9a059d
Diffstat (limited to 'lib/sqlalchemy/dialects')
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/base.py | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 82a5bb6f7..c7e88a643 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -2995,10 +2995,13 @@ class MSDialect(default.DefaultDialect): def get_isolation_level(self, dbapi_connection): cursor = dbapi_connection.cursor() + view_name = "sys.system_views" try: cursor.execute( - "SELECT name FROM sys.system_views WHERE name IN " - "('dm_exec_sessions', 'dm_pdw_nodes_exec_sessions')" + ( + "SELECT name FROM {} WHERE name IN " + "('dm_exec_sessions', 'dm_pdw_nodes_exec_sessions')" + ).format(view_name) ) row = cursor.fetchone() if not row: @@ -3009,31 +3012,30 @@ class MSDialect(default.DefaultDialect): view_name = "sys.{}".format(row[0]) - try: - cursor.execute( - """ - SELECT CASE transaction_isolation_level - WHEN 0 THEN NULL - WHEN 1 THEN 'READ UNCOMMITTED' - WHEN 2 THEN 'READ COMMITTED' - WHEN 3 THEN 'REPEATABLE READ' - WHEN 4 THEN 'SERIALIZABLE' - WHEN 5 THEN 'SNAPSHOT' END - AS TRANSACTION_ISOLATION_LEVEL - FROM {} - where session_id = @@SPID - """.format( - view_name - ) + cursor.execute( + """ + SELECT CASE transaction_isolation_level + WHEN 0 THEN NULL + WHEN 1 THEN 'READ UNCOMMITTED' + WHEN 2 THEN 'READ COMMITTED' + WHEN 3 THEN 'REPEATABLE READ' + WHEN 4 THEN 'SERIALIZABLE' + WHEN 5 THEN 'SNAPSHOT' END + AS TRANSACTION_ISOLATION_LEVEL + FROM {} + where session_id = @@SPID + """.format( + view_name ) - except self.dbapi.Error as err: - raise NotImplementedError( - "Can't fetch isolation level; encountered error {} when " - 'attempting to query the "{}" view.'.format(err, view_name) - ) from err - else: - row = cursor.fetchone() - return row[0].upper() + ) + except self.dbapi.Error as err: + raise NotImplementedError( + "Can't fetch isolation level; encountered error {} when " + 'attempting to query the "{}" view.'.format(err, view_name) + ) from err + else: + row = cursor.fetchone() + return row[0].upper() finally: cursor.close() |
