Python 升级到Teradata 16.00驱动程序后,与Teradata的pyodbc连接不起作用

Python 升级到Teradata 16.00驱动程序后,与Teradata的pyodbc连接不起作用,python,teradata,pyodbc,Python,Teradata,Pyodbc,我有一个Windows应用程序,它利用pyodbc连接到Teradata。目前,客户端安装了14.10或15.00驱动程序来执行此连接。使用以下(简化)代码进行连接: 升级到16.00驱动程序后,此功能将不再工作。相反,它会在同一代码上引发以下错误: pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

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

升级到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?

我遇到了完全相同的问题。这个建议听起来可能很傻,但我的服务器管理员更改了连接字符串的名称,Windows SqlDriverConnection被删除

在我的工作站上,在DSN连接列表中,DSN名称为“TDPROD”,字符串描述为“Teradata”。但是,在服务器上,DSN名称为“TDPROD”,字符串描述为“Teradata数据库ODBC驱动程序16.10”。因此,我必须从此更新python函数(请注意,我使用的是python 3.6,因此可以使用“f”字符串;如果您使用的是早期版本的python,请确保使用支持的方法执行字符串插值):

为此:

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

希望这至少能帮助您检查一些我不太清楚的问题。

这个错误听起来像是ODBC驱动程序没有正确安装。请检查您的ODBC管理员(32位或64位以匹配您安装的任何版本的ODBC驱动程序),并确认您的Teradata驱动程序已安装在
Driver
选项卡中,并且是预期的版本。@jnevil这也是我最初的想法,但它确实正确地出现在ODBC管理员面板中:它是您正在使用的pyodbc库的正确体系结构吗?如果pyodbc是64位的,是否安装了64位驱动程序?
    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)