pyodbc 无法连接到数据库,但 IBM Data Studio 使用相同的凭证连接
pyodbc fails to connect to database, but IBM data studio connects with same credentials
我正在尝试连接到 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 机器上工作。
您不能使用 Microsoft SQL 服务器的 ODBC 驱动程序连接到 IBM DB2 的实例(也不能连接到 Microsoft SQL 服务器以外的任何 DBMS)。
您需要用于此连接的 IBM DB2 ODBC 驱动程序,例如 those from my employer。
您也可以使用 ODBC-to-JDBC Bridge Driver, in combination with a JDBC Driver for IBM DB2, such as JTOpen(开源,来自 IBM)。
仅仅因为来自 Data-Studio 的 jdbc 连接正在工作,并不意味着您的 pyodbc 将连接到 Db2。 pyodbc 不使用 jdbc,而是使用由合适的驱动程序实现的 Db2 的 CLI/ODBC 接口。
要在 Windows 上使用来自 pyodbc 的 Db2,请确保您首先在 Windows、 或 上安装了 Db2 客户端或安装了 Db2 服务器安装在 Windows.
有许多 kinds 个 Db2 客户端。很大程度上取决于运行 Db2 服务器的操作系统(Z/OS、i-Series、Linux、Unix、Windows),以及您想在客户端(开发、administering/monitoring、查询或三者兼而有之)。
对于某些目标平台,有非 IBM 驱动程序,但我不会讨论这些。
在 python 中,您可以选择使用 DSN(数据源名称)连接到数据库(通常这涉及较短的连接字符串)
或没有 DSN(包含所有详细信息的较长连接字符串)。
学习的时候,让微软Windows用odbcad32做大部分的初始工作可能会更容易。
如果 Db2 客户端已配置为访问一个或多个 Db2 数据库,这将是最容易的。先决条件是驱动程序支持 CLI/ODBC.
要定义 DSN(系统 DSN 或用户 DSN),请使用 Microsoft odbcad32 工具指向您的 Db2 数据库并验证连接性。
如果 Db2-server 在 Z/OS 或 i-Series 上运行,可能需要特殊许可要求,具体取决于您是直接连接到目标 Db2-server 还是使用 Db2-connect 网关.
记下 odbcad32 中 Db2 数据库的确切 DRIVER 字符串,包括大小写和空格,因为您将在 python 代码中需要它。
例如,如果您在 Windows 上安装了本地 Db2 服务器(例如免费的 Db2-Express-C),则该驱动程序名称可能类似于 'IBM DB2ODBC DRIVER - DB2COPY1'。
验证在 odbcad32 中与 Db2 数据库的连接是否成功。这很关键。
当odbcad32连接成功后pyodbc通常会连接成功。
在您的 python 代码中,您的连接字符串可以使用 DSN 或显式引用 DRIVER/SERVER/PORT/DATABASE/UID/PWD,以及连接字符串上的任何其他必需设置。
另请记住,您不必使用 pyodbc。 python 还有其他选项可以与 Db2-Servers 交互。做出明智的选择并进行研究。
您还可以使用 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 Driver"。我不认为它可以在线获得,虽然我可能是错的,但我不得不让我们的数据库人员帮助安装它。现在,在 "odbcad32.exe." 下设置我的 DSN 后,我可以通过 ibm_db
和 pyodbc
库进行连接 这需要一段时间才能解决,但主要是因为 IBM 缺乏信息文档。希望这对处于相同情况的任何人都有帮助。
我正在尝试连接到 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 机器上工作。
您不能使用 Microsoft SQL 服务器的 ODBC 驱动程序连接到 IBM DB2 的实例(也不能连接到 Microsoft SQL 服务器以外的任何 DBMS)。
您需要用于此连接的 IBM DB2 ODBC 驱动程序,例如 those from my employer。
您也可以使用 ODBC-to-JDBC Bridge Driver, in combination with a JDBC Driver for IBM DB2, such as JTOpen(开源,来自 IBM)。
仅仅因为来自 Data-Studio 的 jdbc 连接正在工作,并不意味着您的 pyodbc 将连接到 Db2。 pyodbc 不使用 jdbc,而是使用由合适的驱动程序实现的 Db2 的 CLI/ODBC 接口。
要在 Windows 上使用来自 pyodbc 的 Db2,请确保您首先在 Windows、 或 上安装了 Db2 客户端或安装了 Db2 服务器安装在 Windows.
有许多 kinds 个 Db2 客户端。很大程度上取决于运行 Db2 服务器的操作系统(Z/OS、i-Series、Linux、Unix、Windows),以及您想在客户端(开发、administering/monitoring、查询或三者兼而有之)。
对于某些目标平台,有非 IBM 驱动程序,但我不会讨论这些。
在 python 中,您可以选择使用 DSN(数据源名称)连接到数据库(通常这涉及较短的连接字符串) 或没有 DSN(包含所有详细信息的较长连接字符串)。
学习的时候,让微软Windows用odbcad32做大部分的初始工作可能会更容易。 如果 Db2 客户端已配置为访问一个或多个 Db2 数据库,这将是最容易的。先决条件是驱动程序支持 CLI/ODBC.
要定义 DSN(系统 DSN 或用户 DSN),请使用 Microsoft odbcad32 工具指向您的 Db2 数据库并验证连接性。
如果 Db2-server 在 Z/OS 或 i-Series 上运行,可能需要特殊许可要求,具体取决于您是直接连接到目标 Db2-server 还是使用 Db2-connect 网关.
记下 odbcad32 中 Db2 数据库的确切 DRIVER 字符串,包括大小写和空格,因为您将在 python 代码中需要它。
例如,如果您在 Windows 上安装了本地 Db2 服务器(例如免费的 Db2-Express-C),则该驱动程序名称可能类似于 'IBM DB2ODBC DRIVER - DB2COPY1'。
验证在 odbcad32 中与 Db2 数据库的连接是否成功。这很关键。
当odbcad32连接成功后pyodbc通常会连接成功。
在您的 python 代码中,您的连接字符串可以使用 DSN 或显式引用 DRIVER/SERVER/PORT/DATABASE/UID/PWD,以及连接字符串上的任何其他必需设置。
另请记住,您不必使用 pyodbc。 python 还有其他选项可以与 Db2-Servers 交互。做出明智的选择并进行研究。
您还可以使用 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 Driver"。我不认为它可以在线获得,虽然我可能是错的,但我不得不让我们的数据库人员帮助安装它。现在,在 "odbcad32.exe." 下设置我的 DSN 后,我可以通过 ibm_db
和 pyodbc
库进行连接 这需要一段时间才能解决,但主要是因为 IBM 缺乏信息文档。希望这对处于相同情况的任何人都有帮助。