diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-10-04 11:17:26 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-10-04 11:17:26 -0400 |
| commit | f0ea9e37f94bd39fa4f0785dbdcd0ee1759c4a11 (patch) | |
| tree | 1010a692ac8a75339970b3adf46c59248c23d454 /lib/sqlalchemy/dialects/mssql/pyodbc.py | |
| parent | 728ce8cc480d0ada690e5a97067cff821b9a65f3 (diff) | |
| download | sqlalchemy-f0ea9e37f94bd39fa4f0785dbdcd0ee1759c4a11.tar.gz | |
Use SQL Server SERVERPROPERTY for version info w/ pyodbc
Updated the server version info scheme for pyodbc to use SQL Server
SERVERPROPERTY(), rather than relying upon pyodbc.SQL_DBMS_VER, which
continues to be unreliable particularly with FreeTDS.
Change-Id: I4ff49ae13c8ff51bd764980131d41c18d73d87ce
Fixes: #3814
Diffstat (limited to 'lib/sqlalchemy/dialects/mssql/pyodbc.py')
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/pyodbc.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py index 45c091cfb..30db94e49 100644 --- a/lib/sqlalchemy/dialects/mssql/pyodbc.py +++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py @@ -104,8 +104,9 @@ versioning. from .base import MSExecutionContext, MSDialect, VARBINARY from ...connectors.pyodbc import PyODBCConnector -from ... import types as sqltypes, util +from ... import types as sqltypes, util, exc import decimal +import re class _ms_numeric_pyodbc(object): @@ -269,4 +270,22 @@ class MSDialect_pyodbc(PyODBCConnector, MSDialect): self._need_decimal_fix = self.dbapi and \ self._dbapi_version() < (2, 1, 8) + def _get_server_version_info(self, connection): + try: + raw = connection.scalar("SELECT SERVERPROPERTY('ProductVersion')") + except exc.ProgrammingError: + # SQL Server docs indicate this function isn't present prior to + # 2008 + return super(MSDialect_pyodbc, self).\ + _get_server_version_info(connection) + else: + version = [] + r = re.compile('[.\-]') + for n in r.split(raw): + try: + version.append(int(n)) + except ValueError: + version.append(n) + return tuple(version) + dialect = MSDialect_pyodbc |
