From 5fba7db9be7a03076d50051fb84dade31d55262e Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 10 Nov 2016 17:08:06 -0500 Subject: Quote URL tokens with semicolons for pyodbc, adodbapi Fixed bug in pyodbc dialect (as well as in the mostly non-working adodbapi dialect) whereby a semicolon present in the password or username fields could be interpreted as a separator for another token; the values are now quoted when semicolons are present. Change-Id: I5f99fd8db53ebf8e805e7d9d60bc09b8f1af603f Fixes: #3762 --- lib/sqlalchemy/connectors/pyodbc.py | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'lib/sqlalchemy/connectors') diff --git a/lib/sqlalchemy/connectors/pyodbc.py b/lib/sqlalchemy/connectors/pyodbc.py index 1811229d7..6478de582 100644 --- a/lib/sqlalchemy/connectors/pyodbc.py +++ b/lib/sqlalchemy/connectors/pyodbc.py @@ -55,6 +55,7 @@ class PyODBCConnector(Connector): opts.update(url.query) keys = opts + query = url.query connect_args = {} @@ -65,6 +66,15 @@ class PyODBCConnector(Connector): if 'odbc_connect' in keys: connectors = [util.unquote_plus(keys.pop('odbc_connect'))] else: + def check_quote(token): + if ";" in str(token): + token = "'%s'" % token + return token + + keys = dict( + (k, check_quote(v)) for k, v in keys.items() + ) + dsn_connection = 'dsn' in keys or \ ('host' in keys and 'database' not in keys) if dsn_connection: @@ -107,6 +117,7 @@ class PyODBCConnector(Connector): keys.pop("odbc_autotranslate")) connectors.extend(['%s=%s' % (k, v) for k, v in keys.items()]) + return [[";".join(connectors)], connect_args] def is_disconnect(self, e, connection, cursor): -- cgit v1.2.1