一,安装ibm_db,ibm_db_dbi类库
- python版本需要选择3.8左右的,笔者在这里选择的3.8.
pip install ibm_db
pip install ibm_db_dbi
二,网上其他人的示例
- 网上许多人是用到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!")
- 通过查看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__()
- 于是查看ibm_db_dbi.py 中的源码,发现有connect方法,cursor方法,于是按照源码的示例,自己写了基础的连接数据库,查询语句
import ibm_db
import ibm_db_dbi
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()