我在使用pyrabc和TeraData服务器时遇到问题 - 使用相同ODBC驱动程序的perl连接可以正常工作。
看起来pyodbc正在连接,因为我可以获取表名,但是,表名没有正确编码(例如下面的例子)。以下是我尝试过的一系列事项:
设置区域设置:
locale.setlocale(locale.LC_ALL,' en_US.utf8')
更改自动提交和ANSI = True / False'在pyodbc.connect()
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
python代码:
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)' )
答案 0 :(得分:0)
不使用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