Teradata ODBC驱动程序不通过Python连接,但能够通过VBA连接

Teradata ODBC驱动程序不通过Python连接,但能够通过VBA连接,python,vba,odbc,teradata,pyodbc,Python,Vba,Odbc,Teradata,Pyodbc,我有一个奇怪的问题,我可以使用VBA连接到Teradata,但不能通过python从同一个Teradata驱动程序连接 下面是代码片段: 1) VBA 我能够成功连接到teradata 2) 蟒蛇 这句话使我犯了错误- ('IM003', '[IM003] Specified driver could not be loaded due to system error 126 : The specified module could not be found. (Teradata, C:\\P

我有一个奇怪的问题,我可以使用VBA连接到Teradata,但不能通过python从同一个Teradata驱动程序连接

下面是代码片段:

1) VBA

我能够成功连接到teradata

2) 蟒蛇

这句话使我犯了错误-

('IM003', '[IM003] Specified driver could not be loaded due to system error  126
: The specified module could not be found. (Teradata, C:\\Program Files (x86)\\T
eradata\\Client\\13.10\\ODBC Driver for Teradata\\Lib\\tdata32.dll). (160) (SQLD
riverConnect)')
我尝试过各种方法,比如:重新安装TD驱动程序,设置环境变量


但问题仍然存在,我如何能够通过excel VBA而不是python进行连接。

我认为您需要添加驱动程序参数。您可能有多个teradata驱动程序。如果是这种情况,您需要明确声明要使用的驱动程序:例如

#To get a list of drivers
import pyodbc
pyodbc.drivers()
这将返回系统中odbc驱动程序的列表。输出,输出

['SQL Server',
 'SQL Server Native Client 10.0',
 'Amazon Redshift (x64)',
 'Microsoft Access Driver (*.mdb, *.accdb)',
 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)',
 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)',
 'Microsoft Access Text Driver (*.txt, *.csv)',
 'Teradata',
 'SQL Server Native Client 11.0',
 'PostgreSQL ANSI(x64)',
 'PostgreSQL Unicode(x64)',
 'MySQL ODBC 5.3 ANSI Driver',
 'MySQL ODBC 5.3 Unicode Driver',
 'Teradata Database ODBC Driver 16.10',
 'Teradata 7.1 DB2 Wire Protocol',
 'Teradata 7.1 Oracle',
 'Teradata 7.1 Oracle Wire Protocol',
 'Teradata 7.1 SQL Server Legacy Wire Protocol',
 'Teradata 7.1 SQL Server Wire Protocol',
 'Teradata 7.1 MySQL Wire Protocol',
 'Teradata 7.1 PostgreSQL Wire Protocol']
因为有Teradata和Teradata数据库ODBC驱动程序16.10。我们需要声明使用哪一个:

host, username, password = 'hostname','UserName', 'Password'
tdConnect = pyodbc.connect('Driver=Teradata Database ODBC Driver 16.10;DBCNAME=%s;DSN=XXXX;UID=%s;PWD=%s'%(host, username, password),autocommit=True)

我希望这解决了您的问题。

我认为您需要添加驱动程序参数。您可能有多个teradata驱动程序。如果是这种情况,您需要明确声明要使用的驱动程序:例如

#To get a list of drivers
import pyodbc
pyodbc.drivers()
这将返回系统中odbc驱动程序的列表。输出,输出

['SQL Server',
 'SQL Server Native Client 10.0',
 'Amazon Redshift (x64)',
 'Microsoft Access Driver (*.mdb, *.accdb)',
 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)',
 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)',
 'Microsoft Access Text Driver (*.txt, *.csv)',
 'Teradata',
 'SQL Server Native Client 11.0',
 'PostgreSQL ANSI(x64)',
 'PostgreSQL Unicode(x64)',
 'MySQL ODBC 5.3 ANSI Driver',
 'MySQL ODBC 5.3 Unicode Driver',
 'Teradata Database ODBC Driver 16.10',
 'Teradata 7.1 DB2 Wire Protocol',
 'Teradata 7.1 Oracle',
 'Teradata 7.1 Oracle Wire Protocol',
 'Teradata 7.1 SQL Server Legacy Wire Protocol',
 'Teradata 7.1 SQL Server Wire Protocol',
 'Teradata 7.1 MySQL Wire Protocol',
 'Teradata 7.1 PostgreSQL Wire Protocol']
因为有Teradata和Teradata数据库ODBC驱动程序16.10。我们需要声明使用哪一个:

host, username, password = 'hostname','UserName', 'Password'
tdConnect = pyodbc.connect('Driver=Teradata Database ODBC Driver 16.10;DBCNAME=%s;DSN=XXXX;UID=%s;PWD=%s'%(host, username, password),autocommit=True)

我希望这能解决您的问题。

在我的案例中,我能够按照中所述的“解决方法”解决这个问题,尽管我没有使用Informatica或Teradata 13

解决我的问题的解决方法是“系统错误126”,我使用Python、pyodbc和Teradata ODBC驱动程序14.10.00获得该问题:

复制
C:\Program files\Teradata\Client\14.10\Teradata\lib共享ICU库中的所有文件
到文件夹,
C:\Program Files\Teradata\Client\14.10\Teradata nt-x8664\Lib的ODBC驱动程序

不需要重新启动。下次我运行python代码时,它通过ODBC成功地连接到Teradata

Excel和Teradata ODBC测试实用程序,
C:\Program Files\Teradata\Client\14.10\Teradata nt-x8664\Bin\tdxodbc.exe的ODBC驱动程序
在我进行此更改之前能够进行ODBC连接,这很奇怪。它告诉我pyodbc使用不同于Excel和Teradata的odbctestutilty的机制来解析odbcdll依赖关系。这可能与Teradata的安装程序修改的PATH变量中的内容有关。

在我的例子中,我可以按照中所述的“解决方法”解决这个问题,即使我没有使用Informatica或Teradata 13

解决我的问题的解决方法是“系统错误126”,我使用Python、pyodbc和Teradata ODBC驱动程序14.10.00获得该问题:

复制
C:\Program files\Teradata\Client\14.10\Teradata\lib共享ICU库中的所有文件
到文件夹,
C:\Program Files\Teradata\Client\14.10\Teradata nt-x8664\Lib的ODBC驱动程序

不需要重新启动。下次我运行python代码时,它通过ODBC成功地连接到Teradata

Excel和Teradata ODBC测试实用程序,
C:\Program Files\Teradata\Client\14.10\Teradata nt-x8664\Bin\tdxodbc.exe的ODBC驱动程序
在我进行此更改之前能够进行ODBC连接,这很奇怪。它告诉我pyodbc使用不同于Excel和Teradata的odbctestutilty的机制来解析odbcdll依赖关系。这可能与Teradata的安装程序修改的PATH变量有关。

首先,连接字符串是不同的。您是否可以使用您试图从Python中使用的完全相同的连接字符串从VBA进行连接(仅指定
DSN
UID
PWD
)?是的,我可以使用Python代码中使用的相同连接字符串通过VBA进行连接。检查Excel副本的“位”(32位或64位)是否与“位”匹配您正在使用的Python解释器的版本。我正在使用的Excel版本是32位,Python 2.7也是32位安装。PATH变量说什么?首先,连接字符串是不同的。您是否可以使用您试图从Python中使用的完全相同的连接字符串从VBA进行连接(仅指定
DSN
UID
PWD
)?是的,我可以使用Python代码中使用的相同连接字符串通过VBA进行连接。检查Excel副本的“位”(32位或64位)是否与“位”匹配您正在使用的Python解释器的版本。我正在使用的Excel版本是32位,Python 2.7也是32位安装。您的PATH变量怎么说?当然,您应该将ODBC驱动程序更新为aa支持的版本,14.10非常旧,当前是17.xx:-)当然,您应该将ODBC驱动程序更新为aa支持的版本,14.10真的很老了,电流是17.xx:-)