【问题标题】:pyodbc unicode query failspyodbc unicode 查询失败
【发布时间】:2015-02-04 16:06:19
【问题描述】:

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

现在我遇到了执行 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)')

【问题讨论】:

  • 看起来这个驱动需要一个编码字符串而不是一个 unicode 字符串。
  • 你试过.encode('utf-8')吗?
  • 是的@woot,我试过了,但没用
  • @user1263702 抱歉,我无法为您解答...我自己也遇到过各种有关 unixodbc 的 unicode 问题。我切换到由 Uber 编写的 vertica_python。 (pypi.python.org/pypi/vertica-python/0.3.0) 你会想阅读有关如何进行绑定参数的文档(如果我没记错的话,需要编译 postgresql 库)。

标签: python unicode pyodbc vertica


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您使用的是什么版本的 pyodbc 和 python?什么操作系统?

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

    并更新 pyodbc sudo pip install --upgrade pyodbc

    【讨论】:

    • 我在 mac os x 10.9.4 上使用 python 2.7.5 和 pyodbc 3.0.7
    猜你喜欢
    • 2018-02-09
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多