如何正确设置 TeraData pyodbc 字符集/编码



>我在TeraData服务器上使用pyodbc时遇到问题 - 我的perl连接使用相同的ODBC驱动程序可以正常工作。

看起来 pyodbc 正在连接,因为我可以获取表名,但是,表名没有正确编码(下面的示例)。以下是我尝试过的事情列表:

  1. 将我的DSN中的字符集/编码设置为"ASCII","UTF-8"和许多其他编码
  2. 设置
  3. 区域设置:

    locale.setlocale(locale.LC_ALL,"en_US.utf8")

  4. 在pyodbc.connect()中更改autocommit and ANSI=True/False'

python==3.4.3, pyodbc==3.0.10

.odbc.ini:

[ODBC]
InstallDir=/opt/teradata/client/15.10/odbc_64
Trace=0
TraceDll=/opt/teradata/client/15.10/lib/odbctrac.so
TraceFile=/home/solberg/teratrace
TraceAutoStop=0
[ODBC Data Sources]
tera01=Teradata ODBC Driver 15.10
[tera01]
Driver=/opt/teradata/client/15.10/lib64/tdata.so
DBCName=tera01
Username=solberg
Authentication=LDAP

.odbcinst.ini:

[ODBC DRIVERS]
Teradata=Installed
[ODBC Translators]
OEB to ANSI=Installed

蟒蛇代码:

import pyodbc
pyodbc.pooling = False
conn = pyodbc.connect('DSN=tera01;', password=pw)
cursor = conn.cursor()
cursor.tables()
rows = cursor.fetchall()
print(row[0].table_name)

扁牯䱴獩却獥楳湯

print(row[0].table_name.encode('utf_16_le'))

b'AbortListSession'

conn.execute("SELECT DISTINCT column FROM table;").fetchall()
错误: ("HY000

", "[HY000] [unixODBC][驱动程序管理器]驱动程序返回SQL_ERROR或SQL_SUCCESS_WITH_INFO但未找到错误报告 API (0) (SQLExecDirectW)")

不使用pyodbc,但有两件事:1)如果不是所有列都明确命名,有时框架会很困难,所以你可以试试

SELECT DISTINCT column as d_col FROM table;
SELECT column FROM table group by column;

2)你试过Python Teradata模块吗?- 归根结底,它也使用 ODBC(或 REST),但它封装了很多讨厌的东西。(https://github.com/Teradata/PyTd)

[sudo] pip install teradata

最新更新