我正在尝试连接到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机器。
答案 0 :(得分:2)
您无法使用Microsoft SQL Server的ODBC驱动程序连接到IBM DB2实例(也不能连接到Microsoft SQL Server以外的任何DBMS)。
对于此连接,您需要IBM DB2的ODBC驱动程序,例如those from my employer。
您还可以将ODBC-to-JDBC Bridge Driver与IBM DB2的JDBC驱动程序结合使用,例如JTOpen(来自IBM的开源)。
答案 1 :(得分:2)
仅仅因为来自Data-Studio的jdbc连接正在工作,这并不意味着你的pyodbc将连接到Db2。 pyodbc不使用jdbc,而是使用CLI / ODBC接口到Db2,它由合适的驱动程序实现。
要在Windows上使用pyodbc中的Db2,请确保首先在Windows上安装了Db2客户端,或在Windows上安装了Db2服务器。
Db2客户端有很多kinds个。很大程度上取决于运行Db2服务器(Z / OS,i-Series,Linux,Unix,Windows)的操作系统,以及您希望在客户端上执行哪些类型的活动(开发,管理/监视,查询,或者全部三个。)
对于某些目标平台,有非IBM驱动程序,但我不会讨论这些。
在python中,您可以选择使用DSN(数据源名称)连接到数据库(通常这涉及更短的连接字符串) 或没有DSN(包含所有细节的更长连接字符串)。
学习时,使用odbcad32可能更容易让Microsoft Windows完成大部分初始工作。 如果已将Db2客户端配置为访问一个或多个Db2数据库,则这非常简单。前提是驱动程序支持CLI / ODBC。
要定义DSN(系统DSN或用户-DSN),请使用Microsoft odbcad32工具指向Db2数据库并验证连接。
如果Db2服务器在Z / OS或i系列上运行,则可能会有特殊的许可要求,具体取决于您是直接连接到目标Db2服务器还是使用Db2连接网关。
记下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框架。< / p>
在此处阅读Db2文档中的所有内容。 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.5.0/com.ibm.swg.im.dbclient.python.doc/doc/c0054366.html
答案 2 :(得分:1)
我已经解决了这个问题!问题是我错过了“iSeries Access ODBC Driver”。我不认为它可以在线获取,虽然我可能是错的,我必须让我们的数据库人帮忙安装它。现在,在“odbcad32.exe”下设置DSN后,我可以通过ibm_db
和pyodbc
库连接。这需要一段时间才能解决,但主要是因为缺乏来自IBM的信息性文档。希望这可以帮助处于相同情况的任何人。