2017-01-06 8 views
0

У меня странная проблема, когда я могу подключиться к Teradata с помощью VBA, но не могу подключиться через python из одного и того же драйвера Teradata.Teradata ODBC dreiver не подключается через python, но может подключаться через vba

Ниже приведен фрагмент кода:

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 + ';') 

это утверждение бросает меня ниже error-

('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.

+0

С одной стороны, строки подключения разные. Можете ли вы подключиться к VBA, используя ту же самую строку соединения, которую вы пытаетесь использовать с Python (с указанием только 'DSN',' UID' и 'PWD')? –

+0

Да, я могу подключиться через VBA с той же строкой соединения, что и в коде Python. – anurag

+2

Проверьте, соответствует ли «битность» вашей копии Excel (32-разрядная или 64-разрядная версия) «бит» используемого интерпретатора Python. –

ответ

1

Я думаю, вам нужно добавить аргумент драйвера. Возможно, у вас несколько драйверов 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 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) 

Я надеюсь, что исправил вашу проблему.

Смежные вопросы