我看到了类似的模糊响应,似乎它可能与设置连接时出现的任何问题有关。在一个 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=True和logConsole=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. ")