6

我对 Python 很陌生,我在 Win 7-32 工作站上安装了 Python 3.2。尝试使用 adodbapi-2.4.2.2(该软件包的最新更新)连接到 MSSQLServer 2005 Server。

代码/连接字符串如下所示:

conn = adodbapi.connect('Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XXX;Data Source=123.456.789');

从 adodbapi 我不断收到错误消息(这是来自 Wing IDE shell 的完整错误消息):

Traceback(最近一次调用最后一次):文件“D:\Program Files\Wing IDE 4.0\src\debug\tserver_sandbox.py”,第 2 行,在 if name == ' main ':文件“D:\Python32\Lib\ site-packages\adodbapi\adodbapi.py",第 298 行,在连接中引发 InterfaceError #可能是 COM 错误 adodbapi.adodbapi.InterfaceError:

我可以跟踪代码并查看发生的异常。

我还尝试使用带有 OLEDB 提供程序和集成 Windows 安全性的 conn 字符串,结果相同。

所有这些连接字符串都可以在我的工作站上的 UDL 文件和 SSMS 中正常工作,但在 adodbapi 中失败并出现相同的错误。

我该如何解决?

4

3 回答 3

4

试试这个连接字符串:

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 以后),但是经过一分钟的谷歌搜索,我没有找到任何有用的东西,我会把它留给你。

当您解决问题后,此代码应该会成功运行(此时应该会失败)。

import win32com.client
import pythoncom
pythoncom.CoInitialize()
win32com.client.Dispatch('ADODB.Connection')

此外,代码抛出的任何异常都有助于调试您的问题。

于 2011-06-14T16:13:56.760 回答
3

如果其他人发现此线程正在寻找解决我在 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 for Windows Extensions (pywin32):http: //sourceforge.net/projects/pywin32/files/pywin32/Build%20219/

于 2015-03-05T10:05:22.693 回答
2

我遇到了同样的问题,我追踪到加载 win32com.pyd 失败,因为某些系统 DLL 不在“dll 加载路径”中,例如 msvcp100.dll

我通过将很多这些 dll(可能太多)复制到 C:\WinPython-64bit-3.3.3.2\python-3.3.3.amd64\Lib\site-packages\win32 解决了这个问题

于 2014-01-31T12:47:30.590 回答