升级到Teradata 16.00驱动程序后,与Teradata的pyodbc连接无法正常工作

时间:2017-06-12 18:18:15

标签: python teradata pyodbc

我有一个使用pyodbc连接到Teradata的Windows应用程序。目前,客户端安装了14.10或15.00驱动程序来执行此连接。使用此(简化)代码进行连接:

import pyodbc
constr = 'DRIVER={Teradata};DBCNAME='+dbname+';UID='+uid+';PWD='+pwd+';QUIETMODE=YES;'
pyodbc.pooling = False
pyodbc.connect(constr, ANSI=True, autocommit=True)

升级到16.00驱动程序后,这不再有效。相反,它会在相同的代码上抛出以下错误:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0)    (SQLDriverConnect)')

我尝试了一些连接字符串的变体,但都返回了相同的错误:

constr = """DRIVER={Teradata};DSN='+dbname+';UID='+uid+';PWD='+pwd+';QUIETMODE=YES;"""
constr = """DRIVER={Teradata};DSN='+dbname+';DATABASE='+dbname+';UID='+uid+';'+pwd+';QUIETMODE=YES;"""
constr = """Provider=Teradata;DBCNAME='+dbname+';DATABASE='+dbname+';UID='+uid+';PWD='+pwd+';QUIETMODE=YES;"""

使用16.00 teradata驱动程序和pyodbc需要做什么?

1 个答案:

答案 0 :(得分:1)

我有完全相同的问题。这个建议可能听起来很愚蠢,但是我的服务器管理员更改了连接字符串的名称,并且Windows SQLDriverConnect遭到了轰炸。

在我的工作站上,在DSN连接列表中,DSN名称为“TDPROD”,字符串描述为“Teradata”。但是,在服务器上,DSN名称为“TDPROD”,字符串描述为“Teradata Database ODBC Driver 16.10”。所以,我不得不更新我的python函数(请注意我使用的是Python 3.6,所以我可以使用“f”字符串;如果你使用的是早期版本的Python,请确保使用支持的方法执行字符串插值):

    pyodbc.connect(f"""DRIVER=Teradata;
                       DBCNAME=TDPROD;
                       UID={user};
                       PWD={password};
                       QUIETMODE=YES""",
                       autocommit=True,
                       unicode_results=True)

到此:

    pyodbc.connect(f"""DRIVER=Teradata Database ODBC Driver 16.10;
                       DBCNAME=TDPROD;
                       UID={user};
                       PWD={password};
                       QUIETMODE=YES""",
                       autocommit=True,
                       unicode_results=True)

希望这有助于至少给你一些其他东西来检查对我来说不是很明显。