如何在Ubuntu中解决Teradata的pythonodbc问题

时间:2015-07-09 22:32:50

标签: ubuntu teradata pyodbc

我在Teradata Ubuntu中使用Pythonodbc收到非文本错误

`saranya@saranya-XPS-8500:~/Desktop$ python test.py`

追踪(最近一次通话):   文件" test.py",第3行,in     康恩= pyodbc.connect(' DRIVER = {Teradata的}; DBCNAME = **;。UID = *** **; PWD = *****;',ANSI = True,autocommit = True)

pyodbc.Error:(' 632',' [632] 523 630(0)(SQLDriverConnect)')

帖子Pyodbc Issue with Teradata中提供的解决方案没有帮助。

另外, 导出ODBCINI,NLSPATH,LD_LIBRARY_HOME,ODBC_HOME值也无济于事。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我看到了一个类似的模糊响应,看起来它可能与设置连接时的任何问题有关。在linux机器上工作,我能够通过设置DSN来使其工作。为此,请在主目录~/.odbc.ini中创建一个类似于以下内容的文件:

[ODBC] 
InstallDir=/opt/teradata/client/15.10
Trace=0
TraceDll=/opt/teradata/client/15.10/lib64/odbctrac.so
TraceFile={trace location, ie. /home/yourusername/odbctrace/trace.log}
TraceAutoStop=0

[ODBC Data Sources]
testdsn=tdata.so

[testdsn]
Driver=/opt/teradata/client/15.10/lib64/tdata.so
Description=Teradata database
DBCName={ip address of your database}
LastUser=
Username={your database's username}
Password={your database's password}
Database={database to use}
DefaultDatabase={default database to use}

注意:您必须使用您的值填写上述{xxx}。我在linux上使用了teradata odbc驱动程序的默认库安装值。

现在,设置此DSN文件后,设置环境变量

export ODBCINI=/home/yourusername/.odbc.ini

然后你应该能够运行脚本

import pyodbc
pyodbc.pooling = False
conn = pyodbc.connect('DSN=testdsn')

更好的是,如果要连接到Teradata,请安装python teradata模块:

sudo pip install teradata

安装完成后,您可以使用以下脚本创建连接

import teradata
from datetime import *

udaExec = teradata.UdaExec(appName="Generic Name" + 
    datetime.now().strftime("%Y_%m_%d:%H:%M:%S"), version="1.0", 
    configureLogging = True, logConsole=True)
session = udaExec.connect(method="odbc", DSN="testdsn")

通过设置configureLogging=TruelogConsole=True选项,您可以输出其他调试信息。

这至少对我有用!

错误错误

在撰写本文时,Python中的Teradata ODBC驱动程序输出错误的错误消息。如果删除存在的表,则表示:

Error:  (3807, u"[42S02] [Teradata][ODBC Teradata Driver][Teradata Database] Object 'database.table_name' does not exist. ")

如果你创建一个以前不存在的表,它会说:

Error:  (3803, u"[42S01] [Teradata][ODBC Teradata Driver][Teradata Database] Table 'database.table_name' already exists. ")