当前位置: 首页 > news >正文

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包以减少兼容性问题。

http://www.dtcms.com/a/121250.html

相关文章:

  • 计算机控制系统:HX1838红外遥控器解码
  • # 深度学习中的优化算法详解
  • 利用高阶函数实现AOP
  • 蓝桥杯第十五届C++B组省赛真题解析
  • Appium工作原理及环境的搭建(1)
  • 系统性能核心指标:QPS、TPS、RT、并发量详解
  • NVIDIA PhysX 和 Flow 现已完全开源
  • 《Sqoop 快速上手:安装 + 测试实战》
  • 绿电直供零碳园区:如何用清洁能源重塑企业竞争力?
  • 力扣刷题day1(java自用)
  • Cursor编程-从入门到精通__0409
  • Java常用工具算法-6--秘钥托管云服务AWS KMS
  • 西门子S7-1200PLC 工艺指令PID_Temp进行控温
  • spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解
  • 【Proteus仿真】【32单片机-A008】MPX4115压力检测系统设计
  • Linux环境防火墙常用配置说明
  • UGUI源代码之Text—实现自定义的字间距属性
  • AutoModelForCausalLM 解析,因果模型
  • MyBatis中特殊符号处理总结
  • 安卓性能调优之-检测应用启动速度
  • 在Flutter中使用BottomNavigationBar和IndexedStack可以实现一个功能完整的底部导航栏
  • 适用于恶劣工业环境的高功率PoE+网管交换机
  • 状态管理组件Pinia 简介与底层原理 、Pinia 与其他状态管理库对比、Vue3 + Element Plus + Pinia 安装配置详解
  • DAPP实战篇:使用ethers.js连接以太坊智能合约
  • 数字图像相关(DIC)技术在土木行业的部分应用
  • 将已有 SVN 服务打包成 Docker 镜像的详细步骤
  • 蓝桥杯 区间排序
  • git操作0409
  • ruby self
  • 探索 Shell 中的扩展通配符:从 Bash 到 Zsh