From f55c4f6bd2cb2f2b18e62159361ce7ecb5897396 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 30 Mar 2018 11:22:30 -0400 Subject: Filter non-integer characters from pyodbc SQL Server version Adjusted the SQL Server version detection for pyodbc to only allow for numeric tokens, filtering out non-integers, since the dialect does tuple- numeric comparisons with this value. This is normally true for all known SQL Server / pyodbc drivers in any case. Change-Id: I4ab18a07e19231091b5e877ba1fccd5eda72a992 Fixes: #4227 --- lib/sqlalchemy/dialects/mssql/pyodbc.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/dialects') diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py index 14e8ae838..36bcc49b3 100644 --- a/lib/sqlalchemy/dialects/mssql/pyodbc.py +++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py @@ -276,6 +276,8 @@ class MSDialect_pyodbc(PyODBCConnector, MSDialect): def _get_server_version_info(self, connection): try: + # "Version of the instance of SQL Server, in the form + # of 'major.minor.build.revision'" raw = connection.scalar( "SELECT CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR)") except exc.DBAPIError: @@ -283,7 +285,7 @@ class MSDialect_pyodbc(PyODBCConnector, MSDialect): # 2008. Before we had the VARCHAR cast above, pyodbc would also # fail on this query. return super(MSDialect_pyodbc, self).\ - _get_server_version_info(connection) + _get_server_version_info(connection, allow_chars=False) else: version = [] r = re.compile(r'[.\-]') @@ -291,7 +293,7 @@ class MSDialect_pyodbc(PyODBCConnector, MSDialect): try: version.append(int(n)) except ValueError: - version.append(n) + pass return tuple(version) def is_disconnect(self, e, connection, cursor): -- cgit v1.2.1