summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/mssql/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects/mssql/base.py')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index 54f0043c4..d4d303d5d 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -2174,12 +2174,21 @@ def _db_plus_owner(fn):
def _switch_db(dbname, connection, fn, *arg, **kw):
if dbname:
current_db = connection.scalar("select db_name()")
- connection.execute("use %s" % dbname)
+ if current_db != dbname:
+ connection.execute(
+ "use %s"
+ % connection.dialect.identifier_preparer.quote_schema(dbname)
+ )
try:
return fn(*arg, **kw)
finally:
- if dbname:
- connection.execute("use %s" % current_db)
+ if dbname and current_db != dbname:
+ connection.execute(
+ "use %s"
+ % connection.dialect.identifier_preparer.quote_schema(
+ current_db
+ )
+ )
def _owner_plus_db(dialect, schema):