Python连接DB2数据库

简介: Python连接DB2数据库

python版本为3.5

  1. 导入IBM的数据包: Python Package Index 解压后 ibm_db
  2. 下载db2驱动 clidriver 解压后得到clidriver目录
  3. 将clidriver复制到ibm_db目录,进入ibm_db目录,执行python setup.py install即可

ibm_db有两种执行方式

# 1、采用立即执行的方式,不支持?占位符,只能采取拼接字符串的方式,且字符串类型的数据一定要有单引号
sql = "SELECT * FROM TAB_USER WHERE MOBILE = '%s';"%"13911111111"
stmt = ibm_db.exec_immediate(conn, sql)
result = ibm_db.fetch_both(stmt)   # 提取结果
print(result)
# 2、采用预编译的方式,支持 ? 占位符
sql = "SELECT * FROM TAB_USER WHERE MOBILE= ?"
sql_args = ("13911111111",)
stmt = ibm_db.prepare(conn, sql)    # 预编译
ibm_db.execute(stmt, sql_args)      # 执行
result = ibm_db.fetch_row(stmt)
print(result)
import ibm_db
# 连接字符串
connStr = "DATABASE=TEST;HOSTNAME=192.168.0.1;PORT=50000;PROTOCOL=TCPIP;UID=username;PWD=password;"
conn = None
try:
   # 连接数据库
   conn = ibm_db.connect(connStr, "", "")
   # 关闭自动提交
   ibm_db.autocommit(conn, ibm_db.SQL_AUTOCOMMIT_OFF)
   # 以插入语句为例,删除和更新只需要替换语句即可
   sql = "insert into tab_A values('%s', '%s')" % (1, "Jet")
   # 执行SQL语句
   stmt = ibm_db.exec_immediate(conn, sql)
   # 获取受影响的行数
   rows = ibm_db.num_rows(stmt)
   # 提交事务
   ibm_db.commit(conn)
except Exception as ex:
   # 回滚事务
   ibm_db.rollback(conn)
finally:
   # 关闭数据库连接
   ibm_db.close(conn)

ibm_db没办法一次提取多行,提取多行数据,需要循环提取。提取查询结果有四种方式:

# 1.先调用fetch_row(stmt),有结果返回true否则返回false,再调用ibm_db.result(stmt, col_idx)提取结果
ibm_db.fetch_row(stmt)
result = ibm_db.result(stmt, 0)
#2.调用fetch_both(stmt)提取一行,返回的结果是一个字典,取值可以用列名或索引 result["MOBILE"]或 result[0]
result = ibm_db.fetch_both(stmt)
3.调用fetch_assoc(stmt)提取一行,返回的是一个字典,取值只能用列明 result["MOBILE"]
result = ibm_db.fetch_assoc(stmt)
#4.调用fetch_tuple(stmt)提取一行,返回的是一个元组,取值只能用索引 result[0]
result = ibm_db.fetch_tuple(stmt)
#-*-coding-*-
import ibm_db
import time
conn = ibm_db.connect("DATABASE=EDW;HOSTNAME=输入IP;PORT=端口;PROTOCOL=通信协议;UID=用户名;PWD=密码;", "", "")
#print(conn)
if conn:
    #写一条查询语句
    sql = "Select  A,B,C from CC.ABC"
    stmt = ibm_db.exec_immediate(conn,sql)
    result = ibm_db.fetch_both(stmt)
    for i in range(len(result)):
        print("第一个字段:",result[0]+'\n'+"第二个字段:",result[1]+'\n'+"第三个字段",result[2])
        print('----------------')
        #停止0.5秒输出
        time.sleep(0.5)
        result = ibm_db.fetch_both(stmt)
#最后记得关闭数据库连接
ibm_db.close(conn)

注意事项

  1. 就是一定记得要关闭连接。
  2. 读取数据只能一行一行读取,需要result = ibm_db.fetch_both(stmt) 代码在调下一行


相关文章
|
10月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1116 7
|
11月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
11月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
501 13
|
11月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
1927 11
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
1081 77
|
11月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
909 0
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
840 0
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
933 14

推荐镜像

更多