pyodbc 无法连接到数据库,但 IBM Data Studio 使用相同的凭据进行连接



我正在尝试连接到IBM机器上的数据库,我可以通过IBM桌面客户端"IBM Data Studio"进行连接。但是,当我尝试与pyodbc连接时,它无法连接。我收到了一系列错误,但似乎主要响应如下

pyodbc.OperationalError: ('08001', u'[08001] [Microsoft][ODBC SQL Server Driver]
[TCP/IP Sockets]SQL Server does not exist or access denied. (17) 
(SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]ConnectionOpen (
Connect()). (10061); [08001] [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute (0)')

我的代码如下:

import pyodbc
# Specifying the ODBC driver, server name, database, etc. directly
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=*****; PORT=50000;DATABASE=****;UID=***;PWD=***')
# Create a cursor from the connection
cursor = cnxn.cursor()
cnxn.close()

我正在一台Windows机器上工作。

不能将 ODBC 驱动程序用于 Microsoft SQL Server,以连接到 IBM DB2 实例(也不能连接到除 Microsoft SQL Server 之外的任何 DBMS(。

对于此连接,您需要一个适用于 IBM DB2 的 ODBC 驱动程序,例如我雇主提供的驱动程序。

您还可以将 ODBC 到 JDBC 桥接驱动程序与 IBM DB2 的 JDBC 驱动程序结合使用,例如 JTOpen(开源,来自 IBM(。

仅仅因为来自 Data-Studio 的 jdbc 连接正常工作,并不意味着您的 pyodbc 将连接到 Db2。 pyodbc 不使用 JDBC,而是使用 CLI/ODBC 接口到 Db2,该接口由合适的驱动程序实现。

要在 Windows 上使用 pyodbc 中的 Db2,请确保首先在 Windows 上安装了 Db2 客户机,或者在Windows 上安装了 Db2 服务器。

有许多种 Db2 客户机。很大程度上取决于运行 Db2 服务器的操作系统(Z/OS、i-Series、Linux、Unix、Windows(,以及要在客户机上执行的活动类型(开发、管理/监视、查询或全部三者(。

对于某些目标平台,有非 IBM 驱动程序,但我不会讨论这些驱动程序。

在python中,您可以选择使用DSN(数据源名称(连接到数据库(通常这涉及较短的连接字符串( 或者没有 DSN(包含所有详细信息的较长连接字符串(。

在学习时,让 Microsoft Windows 使用 odbcad32 完成大部分初始工作可能会更容易。 如果已将 Db2 客户机配置为访问一个或多个 Db2 数据库,那么这是最容易的。前提是驱动程序支持 CLI/ODBC。

要定义 DSN(系统 DSN 或用户 DSN(,请使用 Microsoft odbcad32 工具指向 Db2 数据库并验证连接性。

如果 Db2 服务器在Z/OS 或 i 系列上运行,那么根据您是直接连接到目标 Db2 服务器还是使用 Db2-connect 网关,可能适用特殊的许可要求。

记下 Db2 数据库的 odbcad32 中的确切 DRIVER 字符串,包括大小写和空格,因为您在 python 代码中需要它。

例如,如果在 Windows 上安装了本地 Db2-server(如免费的 Db2-Express-C(,那么该驱动程序名称可能看起来像"IBM DB2ODBC DRIVER - DB2COPY1"。

在 odbcad32 中验证与 Db2 数据库的连接是否成功。这一点至关重要。

当 odbcad32 成功连接时,pyodbc 通常会成功连接。

在 python 代码中,连接字符串可以使用 DSN,也可以显式引用驱动程序/服务器/端口/数据库/uid/pwd,以及连接字符串上的任何其他必需设置。

还要记住,您不必使用 pyodbc。 python 还有其他选项可以与 Db2-Server 进行交互。做出明智的选择并进行研究。

你也可以使用 IBM 提供的模块 "ibm_db" 或 DBI 接口模块 "ibm_db_api",或者如果你使用的是对象关系映射器,你可以使用 SQLAlchemy 适配器 (ibm_db_sa(,或者你可以使用 django 框架。

在此处的 Db2 文档中阅读有关此内容的所有内容。 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.5.0/com.ibm.swg.im.dbclient.python.doc/doc/c0054366.html

我已经解决了问题!问题是我错过了"iSeries Access ODBC 驱动程序"。我不认为它在网上可用,虽然我可能是错的,但我不得不让我们的数据库人员帮助安装它。现在,在"odbcad32.exe"下设置DSN后,我可以通过ibm_db库和pyodbc库进行连接。这需要一段时间来解决,但主要是因为缺乏IBM的信息文档。希望这对处于相同情况的任何人都有帮助。