ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Python操作DB2数据库

2022-01-10 23:59:12  阅读:282  来源: 互联网

标签:ibm Python res 数据库 db stmt result DB2 fetch


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有