pyodbc unicode查询失败

时间:2015-02-04 16:06:20

标签: python unicode pyodbc vertica

我使用pyodbc连接到Vertica。 我已经安装了Vertica驱动程序,unixodbc和pyodbc。

现在我遇到了executinq unicode查询的问题。

con = pyodbc.connect('Driver={driver};Servername={server};Port={port};Database={db};UserName={user};password={password}'.format(...))
cur = con.cursor()
cur.execute('SELECT * FROM table')  # It works
cur.execute(u'SELECT * FROM table')  # It fails

错误是:

ProgrammingError: ('42601', '[42601] ERROR 4856:  Syntax error at or near " (4856) (SQLExecDirectW)')

2 个答案:

答案 0 :(得分:1)

看起来vertica.ini文件中定义的错误编码(locale中的错误odbc.ini设置)

vertica.ini

[Driver]
DriverManagerEncoding=UTF-16
...

odbc.ini

...
Locale                      = en_US@collation=binary
...

我打赌vertica.ini。我没有要检查的MacOS,但是通过文档,您需要定义UTF-32。您可以发布vertica.ini abd odbc.ini +数据库区域设置吗?

HP Vertica

daniel=> show locale;
  name  |               setting            
--------+--------------------------------------
 locale | en_US@collation=binary (LEN_KBINARY)
(1 row)

有关详细信息,请阅读here

答案 1 :(得分:0)

您使用的是什么版本的pyodbc和python?什么OS?

尝试在你的python代码中使用第一行# - - 编码:utf-8 - - ?

并更新pyodbc sudo pip install --upgrade pyodbc