介绍
利用python实现从Oracle读取数据生成图表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强> 1,涉及到的python模块(模块安装就不进行解释了):强>
导入操作系统 进口cx_Oracle 进口openpyxl 导入的时间 导入csv 进口xlrd 从matplotlib进口pyplot plt 从matplotlib进口font_manager
<强> 2,连接数据库强>
甲骨文客户端要根据自己python对应的版本进行下载
导入操作系统 os.environ [& # 39; NLS_LANG& # 39;]=& # 39;简化CHINESE_CHINA.UTF8& # 39;#字符转换,如果配置了环境变量这里可用不要 os.environ [& # 39; TNS_ADMIN& # 39;]=& # 39; D: \ \ Python \ \ instantclient_12_2& # 39;#甲骨文客户端,如果配置了环境变量这里可用不要 os.environ [& # 39; path & # 39;]=& # 39; D: \ \ \ \ Python instantclient_12_2& # 39;#自己电脑甲骨文客户端所在位置 进口cx_Oracle #方法一:用户名:密码和监听分开写 #康涅狄格州=cx_Oracle.connect(& # 39;用户名/password@host orcl # 39;) #连接数据库 #方法二:用户名:密码和监听写在一起 康涅狄格州=cx_Oracle.connect(& # 39;用户名/password@host: 1521/orcl # 39;) # utf - 8显示中文 #方法三:配置监听并连接 # tns=cx_Oracle.makedsn(& # 39;主机# 39;1521年,& # 39;orcl # 39;,编码=& # 39;utf - 8 # 39;, nencoding=癠TF-8") #康涅狄格州=cx_Oracle.connect(& # 39;用户名# 39;& # 39;密码# 39;,tns) 卑鄙的人=conn.cursor() #获取游标 打印头=True #在每个表的输出包含列标题 sql=把≡馼.name,总和(a.tot_qty)从m_retail c_store b“;\ “a.c_store_id=b。id和一个。由b.name" billdate=20200923组;# sql语句 x=curs.execute (sql) #使用光标进行各种操作 行=x.fetchall () 一行的行: print(行)
<强> 3,创建Excel文件,读取SQL文件,将数据写入Excel保存到本地强>
def export_excel (sql,文件名): rr=curs.execute (sql) 行=curs.fetchall () #获取字段名 title=(我在curs.description[0]我) #创建excel表 世行=openpyxl.Workbook () ws=wb.active #插入字段名到第一行 c的范围(len(标题)): ws。细胞(1 c + 1值=https://www.yisu.com/zixun/title [c]) #写入查询数据 r的范围(len(行)): c的范围(len(行[r])): 如果行[r] [c]: #值不为空时写入,空值不写入 ws.cell (r + 2, c + 1,价值=str(行[r] [c])) # str()防止用科学计数法写入造成信息丢失 # # #保存sql脚本 # ws1=wb.create_sheet (sql) # ws1.cell(1, - 1,价值=sql) # wb.save(文件名) wb.close () curs.close () if __name__==癬_main__”: #方法一:用户名:密码和监听分开写 #康涅狄格州=cx_Oracle.connect(用户名/password@host orcl) #连接数据库 #方法二:用户名:密码和监听写在一起 康涅狄格州=cx_Oracle.connect(用户名/password@host: 1521/ORCL) # utf - 8显示中文 #方法三:配置监听并连接 # tns=cx_Oracle。makedsn (orcl的“主人”,1521年,编码=皍tf - 8”, nencoding=皍tf - 8”) #康涅狄格州=cx_Oracle.connect (tns)“用户名”,“密码”, 卑鄙的人=conn.cursor () #打开sql文件获取sql语句 张开(“零售查询。sql”,编码=皍tf - 8”)作为sql_0: #编码=' utf - 8” sql=sql_0.read () # sql="选择b.name作为店仓,(一个求和。从m_retail tot_qty)数量,c_store b”/#“a.c_store_id=b。id和一个。billdate=20201010 group by b.name” cur_date=trftime (“Y % - % - % d”, time.localtime ()) #“Y % - % - % d % H % m % S”,取值日期 wjm='零售2》+ cur_date +“.xlsx” wjm export_excel (sql) conn.close ()
<强> 4,打开刚刚保存的Excel文件,且读取需要的数据强>
#打开文件 data=https://www.yisu.com/zixun/xlrd.open_workbook (wjm) cur_month=trftime (“% m”, time.localtime()) #取值月份 #查看工作表 # data.sheet_names () #打印(”表:“+ str (data.sheet_names ())) #通过文件名获得工作表,获取工作表板 #表=data.sheet_by_name (Sheet1) 表=data.sheet_by_index(0) #默认读取sheet1 cel_A1=table.cell(0,0) #取指定单元格的值 cel_B1=table.cell (0,1) col_A=table.col_values(0,1) #取指定列的值 col_B=table.col_values (1,1) # col_B=(int x (x)的col_B) #文本转数字 #打印(cel_A1) #打印(col_B) #打印(“整行值:“+ str (table.row_values (0))) #打印(“整列值:“+ str (table.col_values (0,1))) #打印(“整列值:“+ str (table.col_values (1,1))) #打印(col_A)利用python实现从Oracle读取数据生成图表