Python(29):Python3.7操作DB2数据库

Python3.7操作DB2数据库

要在Python中操作DB2数据库,你可以使用IBM提供的 ibm_dbibm_db_sa 包。以下是基本的步骤:

1、安装 ibm_db 包

pip install ibm_db

2、连接到DB2数据库

import ibm_db

conn_str = "DATABASE=<your_database_name>;HOSTNAME=<your_host>;PORT=<your_port>;PROTOCOL=TCPIP;UID=<your_username>;PWD=<your_password>;" conn = ibm_db.connect(conn_str, "", "")

请替换 <your_database_name>, <your_host>, <your_port>, <your_username>, <your_password> 分别为你的数据库名称、主机名、端口号、用户名和密码。

3、执行SQL语句

stmt = ibm_db.exec_immediate(conn, "SELECT * FROM your_table")

result = ibm_db.fetch_assoc(stmt)

while result:

print(result)

result = ibm_db.fetch_assoc(stmt)

这里的 your_table 是你想要查询的表名。

4、插入数据

insert_query = "INSERT INTO your_table (column1, column2) VALUES (?, ?)"

stmt = ibm_db.prepare(conn, insert_query)

data_to_insert = ('value1', 'value2')

ibm_db.execute(stmt, data_to_insert)

这里的 your_table 是你表名。

这里的 column1, column2 是你表中的列名。

5、关闭连接

ibm_db.close(conn)

请确保在使用密码等敏感信息时采取适当的安全措施,例如使用配置文件或环境变量。另外,建议使用上下文管理器或 try/finally 块来确保在发生错误时正确关闭数据库连接。

安装ibm_db和pandas请参考:Linux Centos7安装python3.7和安装pykmip-CSDN博客

6、示例

示例一

#_*_coding:utf-8_*_
import pandas as pd
import ibm_db
import ibm_db_dbi

import os

# import sys
# import importlib
# importlib.reload(sys)
# sys.setdefaultencoding("utf-8")

os.environ['NLS_LANG'] = 'zh_CN.UTF8'

ibm_db_conn = ibm_db.connect("DATABASE="+"sample"+";HOSTNAME="+"10.1.1.38"+";PORT="+"50000"+";PROTOCOL=TCPIP;UID="+"db2inst1"+";PWD="+"xxxxxx"+";", "","", charset='utf8', encoding='utf8')
conn = ibm_db_dbi.Connection(ibm_db_conn)

insert_sql = "INSERT INTO db2inst1.DB2_VARCHAR (aes, sm4, sm4_a, email, phone, ssn, military, passport, intelssn, intelpassport, intelmilitary, intelganghui," \
             " inteltaitonei, credit_card_short, credit_card_long, job,sm4_cbc,sm4_a_cbc) VALUES ('xxxx', '北京xxxx有限公司', '北京市', 'cpq@yahoo.com', '15652996964'," \
             " '210302199608124861', '武水电字第3632734号', 'BWP018930705', '210302199608124861', 'BWP018930705', '武水电字第3632734号', 'H21157232', " \
             "'9839487602', '117', '6227612145830440', '测试开发工程师','北京xxxxx有限公司','产品研发部')"
print(insert_sql)
stmt = ibm_db.exec_immediate(ibm_db_conn,insert_sql)

#select_sql = "SELECT id, aes, sm4, sm4_a, email, phone, ssn, military, passport, intelssn, intelpassport, intelmilitary, intelganghui, " \
              #              "inteltaitonei, credit_card_short, credit_card_long, job FROM DB2_VARCHAR"
#select_sql ="select * from DB2_VARCHAR where sm4_a like '北%'"
# where sm4_a like '北%'
select_sql ="select * from db2inst1.DB2_VARCHAR"


print(select_sql)
pd.set_option('display.width', 1000, 'display.max_rows', 1000000,'display.max_columns', None, 'display.encoding', 'utf-8')
select_result = pd.read_sql(select_sql, conn)
print(select_result)

ibm_db.close(ibm_db_conn)

示例二,预编译插入

#_*_coding:utf-8_*_
import pandas as pd
import ibm_db
import ibm_db_dbi

import os

# import sys
# import importlib
# importlib.reload(sys)
# sys.setdefaultencoding("utf-8")

os.environ['NLS_LANG'] = 'zh_CN.UTF8'

ibm_db_conn = ibm_db.connect("DATABASE="+"sample"+";HOSTNAME="+"10.1.1.38"+";PORT="+"50000"+";PROTOCOL=TCPIP;UID="+"db2inst1"+";PWD="+"xxx"+";", "","", charset='utf8', encoding='utf8')
conn = ibm_db_dbi.Connection(ibm_db_conn)

insert_sql = "INSERT INTO db2inst1.DB2_VARCHAR (aes, sm4, sm4_a, email, phone, ssn, military, passport, intelssn, intelpassport, intelmilitary, intelganghui, inteltaitonei, credit_card_short, credit_card_long, job,sm4_cbc,sm4_a_cbc) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
stmt = ibm_db.prepare(ibm_db_conn, insert_sql)
value=('HMF', '北京xxx有限公司', '北京市', 'cpq@yahoo.com', '15652996964', '210302199608124861', '武水电字第3632734号', 'BWP018930705', '210302199608124861', 'BWP018930705', '武水电字第3632734号', 'H21157232', '9839487602', '117', '6227612145830440', '测试开发工程师','北京XXX有限公司','产品研发部')
ibm_db.execute(stmt, value)

#select_sql = "SELECT id, aes, sm4, sm4_a, email, phone, ssn, military, passport, intelssn, intelpassport, intelmilitary, intelganghui, " \
              #              "inteltaitonei, credit_card_short, credit_card_long, job FROM DB2_VARCHAR"
#select_sql ="select * from DB2_VARCHAR where sm4_a like '北%'"
# where sm4_a like '北%'
select_sql ="select * from db2inst1.DB2_VARCHAR"


print(select_sql)
pd.set_option('display.width', 1000, 'display.max_rows', 1000000,'display.max_columns', None, 'display.encoding', 'utf-8')
select_result = pd.read_sql(select_sql, conn)
print(select_result)

ibm_db.close(ibm_db_conn)

示例三:

#_*_coding:utf-8_*_
import pandas as pd
import ibm_db
import ibm_db_dbi

import os


class DB2utils(object):
    os.environ['NLS_LANG'] = 'zh_CN.UTF8'

    def __init__(self, DATABASE, HOSTNAME, PORT,USER_NAME,PWD):
        self.DATABASE = DATABASE
        self.HOSTNAME = HOSTNAME
        self.PORT = PORT
        self.USER_NAME = USER_NAME
        self.PWD = PWD
        self.conn_str=f"DATABASE={self.DATABASE};HOSTNAME={self.HOSTNAME};PORT={self.PORT};PROTOCOL=TCPIP;UID={self.USER_NAME};PWD={self.PWD};"
        print(self.conn_str)

    def db2_insert(self,insert_sql):
        try:
            ibm_db_conn = ibm_db.connect(self.conn_str, "", "", charset='utf8', encoding='utf8')
            if ibm_db_conn:
                # 插入
                stmt = ibm_db.exec_immediate(ibm_db_conn, insert_sql)
                ibm_db.close(ibm_db_conn)
        except Exception as ex:
            print(str(ex))

    def db2_select(self,select_sql):
        print(select_sql)
        try:
            ibm_db_conn = ibm_db.connect(self.conn_str, "", "", charset='utf8', encoding='utf8')
            if ibm_db_conn:
                conn = ibm_db_dbi.Connection(ibm_db_conn)
                # 查询
                pd.set_option('display.width', 1000, 'display.max_rows', 1000000, 'display.max_columns', None,
                              'display.encoding', 'utf-8')
                select_result = pd.read_sql(select_sql, conn)
                print(select_result)
                ibm_db.close(ibm_db_conn)
        except Exception as ex:
            print(str(ex))




DATABASE = "sample"
HOSTNAME = "10.1.1.38"
PORT = "50000"
USER_NAME = "appuser"
PWD = "xxx"
insert_sql = "INSERT INTO DB2_VARCHAR (aes, sm4, sm4_a, email, phone, ssn, military, passport, intelssn, intelpassport, intelmilitary, intelganghui," \
             " inteltaitonei, credit_card_short, credit_card_long, job,sm4_cbc,sm4_a_cbc) VALUES ('HMF', '北京xxx技术有限公司', '北京市', 'cpq@yahoo.com', '15652996964'," \
             " '210302199608124861', '武水电字第3632734号', 'BWP018930705', '210302199608124861', 'BWP018930705', '武水电字第3632734号', 'H21157232', " \
             "'9839487602', '117', '6227612145830440', '软件测试工程师','北京xxx技术有限公司','产品研发部')"
select_sql ="select * from DB2_VARCHAR"

db2_test = DB2utils(DATABASE, HOSTNAME, PORT, USER_NAME, PWD)

db2_test.db2_insert(insert_sql)
db2_test.db2_select(select_sql)

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值