summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/mssql/pyodbc.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2016-10-04 11:17:26 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-10-04 11:17:26 -0400
commitf0ea9e37f94bd39fa4f0785dbdcd0ee1759c4a11 (patch)
tree1010a692ac8a75339970b3adf46c59248c23d454 /lib/sqlalchemy/dialects/mssql/pyodbc.py
parent728ce8cc480d0ada690e5a97067cff821b9a65f3 (diff)
downloadsqlalchemy-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.py21
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