如何正确设置TeraData pyodbc charset / encoding?

时间:2016-03-16 18:10:20

标签: python teradata pyodbc

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

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

  1. 在我的DSN中设置CHARSET / ENCODING为' ASCII',' UTF-8'以及其他许多
  2. 设置区域设置:

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

  3. 更改自动提交和ANSI = True / False'在pyodbc.connect()

  4. 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)' )

1 个答案:

答案 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