数据库
首页 > 数据库> > Python操作DB2数据库

Python操作DB2数据库

作者:互联网

Python操作DB2数据库

本文中的示例代码:

  • 连接DB2数据库
  • 执行select语句
  • 结果集为字典格式,获取key、value,并使用join方法按照分隔符进行拼接
  • 最终生成语句为查询表的insert数据
  • 将结果写入到文件

DB2提取查询结果有四种方式

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)

注: ibm_db没办法一次提取多行,提取多行数据,需要循环提取

示例代码:

# -*- coding:utf-8 -*-
import os
import ibm_db

# 数据库连接信息
db_url = "DATABASE=moiac;SCHEMA=moiase;HOSTNAME=199.188.166.110;PORT=60000;PROTOCOL=TCPIP;UID=moiase;PWD=moiase;"

# 要查询的表名
tab_name = "t04_job_param"

# 结果文件
file_name = "%s.sql" % (tab_name)
# 删除已存在的文件
if os.path.exists(file_name):
    os.remove(file_name)

# 查询sql
select_sql = """select * from %s""" % (tab_name)

# 连接数据库执行sql获取数据
try:
    # 连接数据库
    conn = ibm_db.connect(db_url, "", "")
    # 关闭自动提交
    ibm_db.autocommit(conn, ibm_db.SQL_AUTOCOMMIT_OFF)
    # 执行SQL语句
    stmt = ibm_db.exec_immediate(conn, select_sql)
    res = ibm_db.fetch_assoc(stmt)
    # res=ibm_db.fetch_both(stmt)
    # res = ibm_db.fetch_tuple(stmt)
    # 计数器
    num = 0
    while (res):
        num += 1
        print("第" + str(num) + "行")
        # print(res)
        # for key,item in res:
        # print()
        key = ','.join(str(k) for k in res.keys())
        val = ','.join(
            '\'' + str(v) + '\''
            if isinstance(v, str)
            # or isinstance(v,unicode)
            # or isinstance(v,datetime.datetime)
            else str(v)
            for v in res.values())
        # print(key)
        # print(val)
        ins_str = "insert into %s (%s) values (%s);" % (tab_name, key, val)
        with open(file_name, 'a') as file:
            file.write(ins_str + "\n")
        file.close()
        # res=ibm_db.fetch_tuple(stmt)
        # res = ibm_db.fetch_both(stmt)
        res = ibm_db.fetch_assoc(stmt)
    print(("%s生成完成, 共%s条数据") % (tab_name, num))
    # 提交事务
    ibm_db.commit(conn)
except Exception as e:
    # 回滚事务
    print(e)
    ibm_db.rollback(conn)
finally:
    # 关闭数据库连接
    ibm_db.close(conn)

标签:ibm,Python,res,数据库,db,stmt,result,DB2,fetch
来源: https://blog.csdn.net/weixin_49192027/article/details/122422045