ProgrammingError raised with pyodbc 4.0.5 + MSSQL 2012
Issue #3910
resolved
When pyodbc is upgraded from 4.0.3 to 4.0.5, below error occurred with SQLAlchemy.
With pyodbc 4.0.3, sample code works well.
With "ODBC Driver 13 for SQL Server", same error occurred.
ODBC error 42000 is "Syntax error or access violation".
"SELECT schema_name()" state works well in SQL management studio and return "dbo".
- Windwos 8.1 64bit, Python 2.7.13 32bit, SQLAlchemy 1.1.5, pyodbc 4.0.5, MSSQL 2012
- sample code
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
import urllib
from sqlalchemy import create_engine, MetaData
#-------------------------------------------------------------------------------
def test_autoload():
odbcdrv = urllib.quote_plus("ODBC Driver 11 for SQL Server")
engine = create_engine(
"mssql+pyodbc://id:pw@ip:1433/db?driver={0}".format(odbcdrv),
echo=True
)
conn = engine.connect()
metadata = MetaData(engine)
metadata.reflect(engine)
#-------------------------------------------------------------------------------
if __name__ == "__main__":
test_autoload()
- error message
2017-02-13 16:51:30,203 INFO sqlalchemy.engine.base.Engine SELECT SERVERPROPERTY('ProductVersion')
2017-02-13 16:51:30,203 INFO sqlalchemy.engine.base.Engine ()
2017-02-13 16:51:30,203 INFO sqlalchemy.engine.base.Engine SELECT schema_name()
2017-02-13 16:51:30,204 INFO sqlalchemy.engine.base.Engine ()
Traceback (most recent call last):
File "testsqlalchemy_pyodbc.py", line 19, in <module>
test_autoload()
File "testsqlalchemy_pyodbc.py", line 13, in test_autoload
conn = engine.connect()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 2082, in connect
return self._connection_cls(self, **kwargs)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 90, in __init__
if connection is not None else engine.raw_connection()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 2168, in raw_connection
self.pool.unique_connection, _connection)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 2138, in _wrap_pool_connect
return fn()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection
return _ConnectionFairy._checkout(self)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout
rec = pool._do_get()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 1138, in _do_get
self._dec_overflow()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\util\langhelpers.py", line 60, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 1135, in _do_get
return self._create_connection()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 461, in __init__
self.__connect(first_connect_check=True)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect
exec_once(self.connection, self)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once
self(*args, **kw)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\event\attr.py", line 256, in __call__
fn(*args, **kw)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1321, in go
return once_fn(*arg, **kw)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect
dialect.initialize(c)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\connectors\pyodbc.py", line 165, in initialize
super(PyODBCConnector, self).initialize(connection)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\dialects\mssql\base.py", line 1705, in initialize
super(MSDialect, self).initialize(connection)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\default.py", line 250, in initialize
self._get_default_schema_name(connection)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\dialects\mssql\base.py", line 1736, in _get_default_schema_name
default_schema_name = connection.scalar(query)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 877, in scalar
return self.execute(object, *multiparams, **params).scalar()
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 945, in execute
return meth(self, multiparams, params)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\sql\elements.py", line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 1053, in _execute_clauseelement
compiled_sql, distilled_params
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 1189, in _execute_context
context)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 1393, in _handle_dbapi_exception
exc_info
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\base.py", line 1182, in _execute_context
context)
File "C:\devtool\py27x86\lib\site-packages\sqlalchemy\engine\default.py", line 470, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]'0x2700' \xb1\xd9\xc3\xb3\xc0\xc7 \xb1\xb8\xb9\xae\xc0\xcc \xc0\xdf\xb8\xf8\xb5\xc7\xbe\xfa\xbd\xc0\xb4\xcf\xb4\xd9. (102) (SQLExecDirectW)") [SQL: u'SELECT schema_name()']
Comments (3)
-
repo owner -
repo owner This reproduces easily and upstream issue is created at https://github.com/mkleehammer/pyodbc/issues/193.
-
repo owner - changed status to resolved
fixed upstream in 4.0.6
- Log in to comment
It may be difficult for me to get a reproducer for this one, can you please try this:
Additionally, can you try a pyodbc-standalone script: