DB2数据库专用python库--ibm_db
DB2数据库连接专用python库--ibm_db
- 前言
- 1.安装条件
- 2.windows系统安装
- 3.Docker Linux容器安装
- 4.验证安装
- 5.ibm_db使用示例及日志
- 6.总结
前言
对 IBM Db2 for LUW 和 IBM Db2 for z/OS 的 Python 支持
Python、适用于 IBM Db2 for LUW 和 IBM Db2 for z/OS 的 DB-API 组件
提供用于连接到 IBM Db2 for LUW 和 IBM Db2 for z/OS 的 Python 接口
ibm_db是Python连接IBM DB2数据库的核心驱动包,支持本地及远程数据库操作。本指南涵盖Windows系统和Docker Linux容器的安装方法,并针对常见问题提供解决方案
ibm_db包含:
- ibm_db驱动程序:适用于 IBM Db2 for LUW 和 IBM Db2 for z/OS 数据库的 Python 驱动程序。使用
IBM Data Server Driver for ODBC 和 CLI API 连接到 IBM Db2 for LUW。 - ibm_db_dbi:符合 DB-API 2.0 规范的 IBM Db2 for LUW 的 Python 驱动程序。
官方安装网址:https://pypi.org/project/ibm-db/
1.安装条件
安装 Python 3.7 <= 3.13。驱动程序支持的最低 python 版本为 python 3.7,支持的最新版本为 python 3.13。 MacOS arm64 支持 Python 3.9 及更高版本。
2.windows系统安装
自动安装(推荐)
pip install ibm_db
此命令会自动下载预编译的Wheel包(含clidriver)。
手动安装(需指定驱动路径)
下载资源:
ibm_db源码包(如ibm_db-3.0.1.tar.gz)。
ODBC驱动(如ntx64_odbc_cli.zip),解压后得到clidriver文件夹。
配置环境变量:
set IBM_DB_HOME=F:\DSDRIVER # 替换为实际路径
set PATH=%IBM_DB_HOME%\bin;%PATH%
安装驱动:
# 进入ibm_db源码目录
cd ibm_db-3.0.1
python setup.py install
注意:若系统已安装DB2客户端,需通过db2level验证路径,并设置IBM_DB_HOME指向该路径。
安装完成之后可进行测试.若运行报错显示:
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ibm_db
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing ibm_db: The specified module could not be found.
>>>
需要确保在导入模块之前将clidriver的依赖库的dll路径设置为:
import os
os.add_dll_directory('clidriver 的安装路径,直到bin文件夹')
#示例:'E:\\python\\venv\\Lib\\site-packages\\clidriver\\bin'
import ibm_db
3.Docker Linux容器安装
# 安装依赖
yum install python3 gcc python3-devel libxml2 pam
# 安装pip(若无)
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
# 安装ibm_db
pip3 install ibm_db
若需使用自定义clidriver,需通过环境变量IBM_DB_HOME指定路径。
4.验证安装
import ibm_db
conn = ibm_db.connect("DATABASE=testdb;HOSTNAME=localhost;PORT=50000;UID=db2inst1;PWD=密码;", "", "")
print("连接成功!")
ibm_db.close(conn)
若报错DLL加载失败,需添加DLL路径:
import os
os.add_dll_directory('C:\\Program Files\\IBM\\CLIDRIVER\\bin') # 替换为实际路径
import ibm_db
5.ibm_db使用示例及日志
import ibm_db
import ibm_db_dbi
# 连接DB2数据库(使用两种方式演示)
try:
# 方式1:直接使用ibm_db连接
conn_str = (
'database=pydev;'
'hostname=host.test.com;'
'port=50000;' # 替换实际端口号
'protocol=tcpip;'
'uid=db2inst1;'
'pwd=secret'
)
ibm_db_conn = ibm_db.connect(conn_str, '', '')
# 方式2:通过ibm_db_dbi连接(基于现有连接)
conn = ibm_db_dbi.Connection(ibm_db_conn)
# 创建表
create_table_sql = "CREATE TABLE mytable (id INT, name VARCHAR(50))"
stmt_create = ibm_db.exec_immediate(ibm_db_conn, create_table_sql)
print("Table created")
# 插入数据(参数化查询)
insert_sql = "INSERT INTO mytable VALUES (?, ?)"
params = ((1, 'Sanders'), (2, 'Pernal'), (3, 'OBrien'))
stmt_prepared = ibm_db.prepare(ibm_db_conn, insert_sql)
ibm_db.execute_many(stmt_prepared, params)
print(f"Inserted {len(params)} rows")
# 查询数据(使用ibm_db_dbi)
cursor = conn.cursor()
cursor.execute("SELECT id, name FROM mytable")
rows = cursor.fetchall()
print("\nQuery results via ibm_db_dbi:")
for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}")
# 查询数据(直接使用ibm_db)
stmt_select = ibm_db.exec_immediate(ibm_db_conn, "SELECT * FROM mytable")
print("\nQuery results via ibm_db:")
while True:
row = ibm_db.fetch_tuple(stmt_select)
if not row:
break
print(f"ID: {row[0]}, Name: {row[1]}")
# 删除表(带异常处理)
drop_table_sql = "DROP TABLE mytable"
ibm_db.exec_immediate(ibm_db_conn, drop_table_sql)
print("\nTable dropped")
except ibm_db.Error as e:
print(f"Database error: {ibm_db.stmt_errormsg()}")
finally:
# 关闭连接
if 'ibm_db_conn' in locals():
ibm_db.close(ibm_db_conn)
print("Connection closed")
启用日志:
import ibm_db
ibm_db.debug(True) # 控制台日志
ibm_db.debug("log.txt") # 输出到文件
6.总结
通过合理配置环境变量及依赖项,ibm_db可在多种环境中稳定运行。若需连接非LUW服务器(如z/OS),需额外配置DB2 Connect许可证。建议优先使用预编译Wheel包以减少兼容性问题。