Подключение к SQLServer 2005 с помощью adodbapi
Я очень новичок в Python, и у меня установлен Python 3.2 на рабочей станции Win 7-32. Попытка подключиться к серверу MSSQLServer 2005 с помощью adodbapi-2.4.2.2, последнего обновления этого пакета.
Строка кода / соединения выглядит следующим образом:
conn = adodbapi.connect ('Поставщик =SQLNCLI.1; Интегрированная безопасность =SSPI; Информация о сохраняемой безопасности = Ложь; Начальный каталог =XXX; Источник данных =123.456.789');
Из adodbapi я постоянно получаю сообщение об ошибке (это полное сообщение об ошибке из оболочки Wing IDE):
Трассировка (последний вызов был последним): Файл "D:\Program Files\Wing IDE 4.0\src\debug\tserver_sandbox.py", строка 2, если имя == 'main': Файл "D:\Python32\Lib\site-packages\adodbapi\adodbapi.py", строка 298, в файле connect connect InterfaceError # Вероятно, ошибка COM adodbapi.adodbapi.InterfaceError:
Я могу проследить через код и увидеть исключение, как это происходит.
Я также попытался использовать строки conn с OLEDB-провайдером и встроенной системой безопасности Windows, с теми же результатами.
Все эти строки подключения работают нормально из файла UDL на моей рабочей станции и из SSMS, но завершаются с той же ошибкой в adodbapi.
Как это исправить?
3 ответа
Попробуйте эту строку подключения:
Initial Catalog=XXX; Data Source=<servername>\\<SQL Instance name>; Provider=SQLOLEDB.1; Integrated Security=SSPI
Обновить
МММ нормально. Глядя на источник adodbapi, я бы сказал, что у вас ошибка COM. (да, я знаю, что это говорит след). Но именно с инициализацией соответствующих COM-объектов.
Это означает, что ваша строка подключения не имеет ничего общего с трассировкой. Я думаю, что для начала стоит убедиться, что ваша копия pythoncom обновлена.
Возможно, win32com/pythoncom еще не поддерживает Python 3K (начиная с версии 3.0), но после минуты поиска в Google я не нашел в этом ничего полезного и оставлю это вам.
Этот код должен успешно работать, когда вы исправите свою проблему (и в данный момент должен потерпеть неудачу).
import win32com.client
import pythoncom
pythoncom.CoInitialize()
win32com.client.Dispatch('ADODB.Connection')
Также любое исключение, которое выдает код, будет полезно для решения вашей проблемы.
В случае, если кто-то еще найдет эту ветку в поисках разрешения аналогичной ошибки, которую я видел в Python 2.7:
Traceback (most recent call last):
File "get_data.py", line 10, in <module>
connection = get_connection(r"XXX\YYY", "DB")
File "get_data.py", line 7, in get_connection
conn = adodbapi.connect(connstring)
File "C:\Python27\lib\site-packages\adodbapi\adodbapi.py", line 116, in connect
raise api.OperationalError(e, message)
adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: Dispatch('ADODB.Connection') failed.",), 'Error opening connection to "Data Source=XXX\\YYY; Initial Catalog=DB; Provider=SQLOLEDB.1; Integrated Security=SSPI"')
В моем случае простым решением было установить Python для расширений Windows (pywin32) отсюда: http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/
У меня была такая же проблема, и я отследил ее до сбоя при загрузке win32com.pyd из-за некоторых системных библиотек DLL, которых нет в "пути загрузки DLL", таких как msvcp100.dll
Я решил проблему, скопировав много этих dll (вероятно, слишком много) в C:\WinPython-64bit-3.3.3.2\python-3.3.3.amd64\Lib\site-packages\win32