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) 代码在调下一行


相关文章
|
2天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
10 0
|
2天前
|
SQL 关系型数据库 MySQL
第十三章 Python数据库编程
第十三章 Python数据库编程
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
7天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
129 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
7天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
28 6
|
12天前
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第二章(Node连接本地数据库)
【4月更文挑战第2天】本文介绍了如何使用Node.js连接本地MySQL数据库。首先,提到了在MySQL官网下载安装数据库和使用Navicat for MySQL进行数据库管理。接着,通过`yarn add mysql`在项目中安装数据库依赖。然后,创建`app.js`文件,设置数据库连接参数,并建立连接进行查询操作。遇到导入模块的错误后,修改导入方式为CommonJS语法。
30 1
|
13天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
14天前
|
SQL 监控 关系型数据库
PG数据库释放闲置连接
PG数据库释放闲置连接
21 0
|
18天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
23 0
|
SQL 关系型数据库 数据库连接
Python连接DB2操作的一个小例子
QQ交流群:127591054 作者:JackChiang 作者QQ:595696297 Python版本3.5 这个小项目,是解决数据库查看的时候一些错误的,查看。
1873 0