Teradata ODBC dreiver不通过python连接但能够通过vba连接

时间:2017-01-06 16:43:42

标签: python vba odbc teradata pyodbc

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

以下是代码段:

1)VBA

connection_string = "Driver={Teradata};" & "DBCName=" & dsn_name & ";Database=" & database_name & "; User ID =" & user_name & ";Password=" & password

我能够成功连接到teradata。

2)Python

import pyodbc
dsn_name="td_dev"
user_name="test"
password="test"
db = pyodbc.connect('DSN=' + dsn_name + ';UID='+ user_name +';PWD=' + password + ';')

这句话让我误以为错误 -

('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连接。

2 个答案:

答案 0 :(得分:1)

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

#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 Database ODBC Driver 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)

我希望能解决你的问题。

答案 1 :(得分:1)

就我而言,即使没有使用Informatica或Teradata 13,也可以按照https://knowledge.informatica.com/s/article/134879中所述通过“解决方法”来解决此问题。

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

复制C:\Program Files\Teradata\Client\14.10\Shared ICU Libraries for Teradata\lib中的所有文件 到文件夹, C:\Program Files\Teradata\Client\14.10\ODBC Driver for Teradata nt-x8664\Lib

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

Excel和Teradata ODBC测试实用程序的事实, C:\Program Files\Teradata\Client\14.10\ODBC Driver for Teradata nt-x8664\Bin\tdxodbc.exe能够在之前建立ODBC连接,我做出的更改很奇怪。它告诉我,pyodbc使用与Excel和Teradata的ODBC测试实用程序不同的机制来解决ODBC DLL依赖关系。可能与Teradata安装程序修改后的PATH变量有关。