【发布时间】:2017-02-11 15:01:50
【问题描述】:
我正在尝试使用 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 shell 建立连接,这让我认为我的 ODBC 连接工作正常。 是吗?
网上没有太多关于此的信息。以下是我根据我找到的一些博客所做的一些事情。 我的理解正确吗?
-
正如PyODBC ticket中提到的:
在我的例子中,ODBC 驱动程序 (NetezzaSQL) 被设置为使用 UTF8。我首先虽然问题是 Python 的 UC2 或 UC4 版本。两者都没有区别。将驱动程序切换为 UTF16 (UnicodeTranslationOption=utf16) 为我解决了这个问题。
我在所有
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
【问题讨论】:
-
最后,我不得不创建在 Python2.7 上运行的新应用程序
标签: python python-3.x ubuntu-14.04 pyodbc netezza