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

pyodbc connection to Teradata not working after upgrade to Teradata 16.00 driver

我有一个 Windows 应用程序利用 pyodbc 连接到 Teradata。目前,客户端安装了 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)')

我已经尝试了几种连接字符串变体,但所有 return 都出现相同的错误:

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?

我遇到了完全相同的问题。这个建议听起来可能很愚蠢,但我的服务器管理员更改了连接字符串的名称并且 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)

希望这至少能为您提供其他一些对我来说不是很明显的东西来检查。