“ IBM i 上执行一个 Python 程序”一文介绍了如何在 IBM i 上安装配置 Python 运行环境,下面利用这个机会介绍如何用 Python 去访问 IBM i 。
本文将介绍用 Python 来执行 IBM i 的命令和用 Python 访问 Db2 for IBM i 数据库:
需要安装 Python3-itoolkit 包, Python-itookit 是 IBM 为 IBM i 系统推出的工具包,可以通过程序调用来访问系统资源,通过它可以调用 ILE 程序、服务程序、调用 CL 命令、调用 PASE shell 命令等等。
需要安装 Python3-ibm-db 包,它是 Db2 for IBM i 数据库的连接器,实现对数据库的 native 访问。
下面举几个例子来说明如何利用 P ython 访问 IBM i 。
基本步骤:
**WRKSYSSTS**
#coding=utf-8
from itoolkit import *
from itoolkit.transport import DatabaseTransport
import ibm_db_dbi as dbi
doc=open('/test/wajout.txt','w')
conn = dbi.connect()
itransport = DatabaseTransport(conn)
itool = iToolKit()
itool.add(iCmd5250('wrksyssts','WRKSYSSTS'))
itool.call(itransport)
wrksyssts = itool.dict_out('wrksyssts')
print(wrksyssts['wrksyssts'])
print(wrksyssts['wrksyssts'],file=doc)
conn.close()
大家可以看到这个 Python 程序的执行结果和在 AS/400 命令行上执行的结果一摸一样,只是由于在 PASE 里显示的问题
,右侧的一部分没有显示出来。
为了解决显示问题,可以利用 print 语句将 WRKSYSSTS 命令输出到某个文件之中,例如这个小程序是将 WRKSYSSTS 命令的执行结果输出到 /test/wajout.txt 文件,如下图所示,这样 WRKSYSSTS 命令就可以完全显示出来了。
基本步骤:
下面是一个基本的例子:
#coding=utf-8
import ibm_db_dbi as dbi
conn = dbi.connect()
sql="select * from xqlib/tablib1"
con1 = conn.cursor()
con1.execute(sql)
print("\\n\\n ****** Start ******\\n\\n")
for row in con1.fetchall():
print(row)
con1.close()
conn.close()
print("\\n\\n ****** End ******\\n\\n")
用命令 call qp2term 进入 AS/400 PASE 环境,运行一下这个程序,检查执行结果:
这个 Python 是读取 xqlib 库中的 table1 表,然后,将内容按顺序输出,输出的格式比较简单,不太美观。
下面介绍用 Python 第三方工具 PTable 模块来生成更加美观的 ASCII 格式输出。
#coding=utf-8
import ibm_db_dbi as dbi
from prettytable import from_db_cursor
conn = dbi.connect()
sql="select idn,name,age from xqlib.table1"
con1 = conn.cursor()
con1.execute(sql)
print(from_db_cursor(con1))
con1.close()
conn.close()
用命令 call qp2term 进入 AS/400 PASE 环境,运行一下这个程序,检查执行结果,这中输出就美观多了。
除了用 PTable 库的方法意外,还可以利用 xlsxwriter 模块所提供的强大功能将 DB2 for IBM i 的数据输出到 EXCEL 电子表格中。
#coding=utf-8
import ibm_db_dbi as dbi
from xlsxwriter import Workbook
conn = dbi.connect()
sql="select idn,name,age from xqlib.table1"
con1 = conn.cursor()
con1.execute(sql)
with Workbook('/test/table1.xlsx') as workbook:
worksheet = workbook.add_worksheet()
worksheet.write_row('A1',['ID','Name','Age'])
for rownum,row in enumerate(con1,start=1):
worksheet.write_row(rownum,0,row)
con1.close()
conn.close()
检查执行结果,大家可以看到 AS/400 上 table1 表中的内容被输出到 EXCEL 电子表格中了。
最后举一个例子是对上面的例子进行扩展,将 Db2 for IBM i 的数据在 EXCEL 电子表格中生成统计图表。
#coding=utf-8
import ibm_db_dbi as dbi
from xlsxwriter import Workbook
conn = dbi.connect()
sql="select name,age from xqlib.table1"
con1 = conn.cursor()
con1.execute(sql)
with Workbook('/test/table2.xlsx') as workbook:
worksheet = workbook.add_worksheet()
worksheet.write_row('A1',['Name','Age'])
for rownum,row in enumerate(con1,start=1):
worksheet.write_row(rownum,0,row)
chart=workbook.add_chart({'type':'column'})
chart.set_title({'name':'Student Stastics'})
chart.add_series({
'name': ' 年龄 ',
'categories': '=Sheet1!$A$2:$A'+ str(rownum+1),
'values': '=Sheet1!$B$2:$B'+ str(rownum+1)
})
worksheet.insert_chart('A5',chart)
con1.close()
conn.close()
执行这个 Python 程序 , 检查执行结果 , 大家可以看到 AS/400 上 table1 表中的内容被输出到 EXCEL 电子表格中 , 同时生成了统计柱状图。
注:
“ IBM i 上执行一个 Python 程序”
链接 https://www.talkwithtrend.com/Article/254917
仅供参考
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞3
添加新评论0 条评论