Python连接DB2数据库

一,安装ibm_db,ibm_db_dbi类库

  1. python版本需要选择3.8左右的,笔者在这里选择的3.8.
pip install ibm_db
pip install ibm_db_dbi

二,网上其他人的示例

  1. 网上许多人是用到ibm_db库进行连接,如下方代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-

#########################
# excute python2.7.13
# sudo pip install ibm_db
#########################
import ibm_db

def getDateFromDb2(uid,pwd):
  pass
try:
  conn = ibm_db.connect("DATABASE=seat;HOSTNAME=10.221.196.xx;PORT=50000;PROTOCOL=TCPIP;\
    UID=xxx;PWD=xxx", "", "")
except:
  print("connect failed,%s" % ibm_db.conn_errormsg())
else:
  sql = "SELECT * FROM TM_SEAT_CONDITION WHERE airline = 'CA' and "\
    "FLT_REG = 'B6822' and MARK_FOR_DELETE='N'"
  try:
    stmt = ibm_db.exec_immediate(conn, sql)
    dictionary = ibm_db.fetch_both(stmt)
    while dictionary!=False:
      for i in range(0, 15):
        if i in (10, 12):
          print(dictionary.get(i).strftime('%Y-%m-%d %H:%M:%S')),
        else:
          print(dictionary.get(i)),
      print("\n")
      dictionary = ibm_db.fetch_both(stmt)
  except:
    print("stmt failed,%s" % ibm_db.stmt_errormsg())
  finally:
    if ibm_db.active(conn):
      ibm_db.close(conn)
    print("database close success!")

 # -------------------提取查询结果有四种方式-----------------------#
    # 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没办法一次提取多行,提取多行数据,需要循环提取
  1. 通过查看ibm_db库,发现上方的许多方法已不可用,以下是ibm_db.py 中的代码
import os
import sys
if 'clidriver' not in os.environ['PATH']:
    os.environ['PATH'] = os.environ['PATH'] + ";" + os.path.join(os.path.abspath(os.path.dirname(__file__)), 'clidriver', 'bin')
if sys.version_info >= (3,8,):
    if 'IBM_DB_HOME' not in os.environ:
        os.add_dll_directory(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'clidriver', 'bin'))
    else:
        ibm_db_home = os.environ['IBM_DB_HOME'].strip('"')
        os.add_dll_directory(os.path.join(ibm_db_home, 'bin'))
def __bootstrap__():
   global __bootstrap__, __loader__, __file__
   import sys, pkg_resources, imp
   __file__ = pkg_resources.resource_filename(__name__,'ibm_db_dlls\ibm_db.dll')
   __loader__ = None; del __bootstrap__, __loader__
   imp.load_dynamic(__name__,__file__)
__bootstrap__()
  1. 于是查看ibm_db_dbi.py 中的源码,发现有connect方法,cursor方法,于是按照源码的示例,自己写了基础的连接数据库,查询语句
import ibm_db
import ibm_db_dbi   # ADD DBI LAYER
import sys

Conn = ibm_db_dbi.connect("DATABASE=PLOGDB;HOSTNAME=255.255.255.255;PORT=50002;PROTOCOL=TCPIP;UID=username;PWD=password;", "", "")
sql1 = "select * from SVCGOV.T_SVC_TRACE_1"

Cursor = Conn.cursor()
stmt = Cursor.execute(sql1)
print("stmt:",stmt)
result = Cursor.fetchall()
print("result:",result)
result = Cursor.fetchone()
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西门一刀

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值