【问题标题】:Connecting to SQLServer 2005 with adodbapi使用 adodbapi 连接到 SQLServer 2005
【发布时间】:2011-05-22 06:03:53
【问题描述】:

我对 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 行,在 如果 name == 'ma​​in': 文件“D:\Python32\Lib\site-packages\adodbapi\adodbapi.py”,第 298 行,在连接中 raise InterfaceError #可能是 COM 错误 adodbapi.adodbapi.InterfaceError:

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • 我对 adodbapi 不太了解,但由于它不适合你,所以不妨试试 pyodbc。祝你好运。
  • @Adam - 谢谢 - 将在他们为 Python 3 发布时尝试它 - 在网页上他们说它正在等待 - 请参阅 code.google.com/p/pyodbc。大约一个月前我刚开始使用 Python,python.org 建议新手直接使用 3,这就是我所拥有的。我宁愿直接使用 ADO,而不必为 ODBC 连接而烦恼,但如果这就是我可以开始工作的全部,我会继续使用它。同时让我们看看其他人是否提出了解决方案。

标签: python database sql-server-2005 adodbapi


【解决方案1】:

试试这个连接字符串:

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

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

【讨论】:

  • 谢谢,但您使用 OLEDB 的 conn 字符串似乎没有任何区别。
  • @Mikey 快速查看我更新的答案并回发您获得的回溯。
  • 将在周末检查它。同时我降级了 Python 2.72,因为我想使用的大多数库还没有准备好 P3 - 但仍然有同样的错误,无论是原生提供程序和 OLEDB。现在,我看到的唯一异常/错误消息是我在 OP 中发布的。我会接受你的回答,因为你已经花时间 - 将不胜感激任何进一步的帮助 - Tnx。
  • @Mikey Ummm 好的。当您有机会回溯测试代码时会很好,但如果您在使用 Python 2.7 时遇到问题,那么这可能会很棘手。
  • np - 我有另一台可以使用 P3 运行的机器
【解决方案2】:

如果其他人发现此线程正在寻找解决我在 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/

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 谢谢 - 几个月前我搬到了 GoLang。试试看... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2010-10-02
    相关资源
    最近更新 更多