执行查询时PyODBC Python 3错误(Ubuntu 14.04)

我正在尝试使用Python 3.4.3在Ubuntu 14.04上配置ODBC.我能够成功建立连接,但是执行时出现此错误:

>>> cursor.execute("SELECT * FROM xxx.yyy.zzz LIMIT 100;")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: ('42000', '[42000] ERROR:  \'S\'\nerror    ^ found "S" (at char 1) expecting a keyword (27) (SQLExecDirectW)')

执行查询的相同代码在Python 2.7上运行良好.我还可以使用strace isql从UNIX外壳建立连接,这使我认为ODBC连接工作正常.是吗?

网上没有太多有关此的信息.以下是根据我发现的一些博客所做的一些事情.我的理解正确吗?

>如PyODBC ticket中所述:

In my case the ODBC driver (NetezzaSQL) was set to use
UTF8. I first though the issue was either a UC2 or UC4 build of Python. Both made no difference. Switching the driver to UTF16
(UnicodeTranslationOption=utf16) fixed the issue for me.

我在所有obdc * .ini文件中都设置了UnicodeTranslationOption = utf16.由于我的代码在Python 2.7上运行,是否表示此参数设置正确?
>在document to configure PyODBC中提到我应该使用UCS2版本构建Python.但是在我的机器上,Python2.7和Python3.4都说它们具有UCS4版本,并且由于代码在Python 2.x上运行,因此这不是UCS4的问题.

我使用以下命令检查了UCF版本:

user@host:~$python -c "import sys;print(sys.maxunicode<66000 and'UCS2'or'UCS4')"
UCS4
user@host:~$python3 -c "import sys;print(sys.maxunicode<66000 and'UCS2'or'UCS4')"
UCS4

解决方法:

在/etc/odbcinst.ini文件中,将UnicodeTranslationOption设置为utf16:

UnicodeTranslationOption = utf16

然后将/etc/odbcinst.ini复制到/home/\u0026lt;user\u0026gt;/.odbcinst.ini

另一个技巧是将/etc/odbc.ini复制到/home/\u0026lt;user\u0026gt;/.odbc.ini,这样就不必导出以下变量:

> LD_LIBRARY_PATH
> ODBC_INI
> NZ_ODBC_INI_PATH

上一篇:python-异常值:(“ 08001”,“ [08001] [unixODBC] [FreeTDS] [SQL Server]无法连接到数据源(0)(SQLDriverConnect)”)


下一篇:使用odbc_connect从SQLAlchemy连接到SQL Server