python从Oracle读取数据生成图表


Posted in Python onOctober 14, 2020

初次学习python,连接Oracle数据库,导出数据到Excel,再从Excel里面读取数据进行绘图,生成png保存出来。

1、涉及到的python模块(模块安装就不进行解释了):

import os
import cx_Oracle
import openpyxl
import time
import csv
import xlrd
from matplotlib import pyplot as plt
from matplotlib import font_manager

2、连接数据库

oracle客户端要根据自己python对应的版本进行下载

import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #字符转换,如果配置了环境变量这里可用不要
os.environ['TNS_ADMIN'] = 'D:\\Python\\instantclient_12_2' #oracle客户端,如果配置了环境变量这里可用不要
os.environ['Path'] = 'D:\\Python\\instantclient_12_2' #自己电脑oracle客户端所在位置

import cx_Oracle

# 方法一:用户名、密码和监听分开写
#  conn=cx_Oracle.connect('username/password@host/orcl')  #连接数据库

# 方法二:用户名、密码和监听写在一起
  conn = cx_Oracle.connect('username/password@host:1521/ORCL') # utf-8显示中文

#方法三:配置监听并连接
#  tns=cx_Oracle.makedsn('host',1521,'orcl',encoding = 'utf-8',nencoding = "UTF-8")
#  conn=cx_Oracle.connect('username','password',tns)

curs=conn.cursor()     #获取cursor
printHeader = True # include column headers in each table output
sql="select b.name,sum(a.tot_qty) from m_retail a ,c_store b " \
  "where a.c_store_id=b.id and a.billdate=20200923 group by b.name" #sql语句
x=curs.execute(sql)             #使用cursor进行各种操作
rows= x.fetchall()
for row in rows:
  print(row)

3、创建Excel文件,读取SQL文件,将数据写入Excel保存到本地

def export_excel(sql,fileName):
  rr = curs.execute(sql)
  rows = curs.fetchall()

  #获取字段名
  title = [ i[0] for i in curs.description ]

  #创建excel表
  wb = openpyxl.Workbook()
  ws = wb.active

  #插入字段名到第一行
  for c in range(len(title)):
    ws.cell(1,c+1,value = title[c])

  #写入查询数据
  for r in range(len(rows)):
    for c in range(len(rows[r])):
      if rows[r][c]: #值不为空时写入,空值不写入
        ws.cell(r+2,c+1,value=str(rows[r][c])) #str()防止用科学计数法写入造成信息丢失
  #
  # #保存sql脚本
  # ws1 = wb.create_sheet('sql')
  # ws1.cell(1,1,value=sql)
  #
  wb.save(fileName)
  wb.close()
  curs.close()

if __name__ == '__main__':
# 方法一:用户名、密码和监听分开写
#  conn=cx_Oracle.connect('username/password@host/orcl')  #连接数据库

# 方法二:用户名、密码和监听写在一起
  conn = cx_Oracle.connect('username/password@host:1521/ORCL') # utf-8显示中文

#方法三:配置监听并连接
#  tns=cx_Oracle.makedsn('host',1521,'orcl',encoding = 'utf-8',nencoding = "UTF-8")
#  conn=cx_Oracle.connect('username','password',tns)

  curs= conn.cursor()
  #打开sql文件获取sql语句
  with open('零售查询.sql',encoding= 'utf-8') as sql_0:#encoding= 'utf-8'
    sql = sql_0.read()
  # sql = "select b.name as 店仓,sum(a.tot_qty) as 数量 from m_retail a ,c_store b " \
  #    "where a.c_store_id=b.id and a.billdate=20201010 group by b.name"
  cur_date = time.strftime("%Y-%m-%d", time.localtime())#"%Y-%m-%d-%H%M%S",取值日期
  wjm='零售2'+cur_date+'.xlsx'
  export_excel(sql,wjm)
  conn.close()

4、打开刚刚保存的Excel文件,且读取需要的数据

# 打开文件
data = xlrd.open_workbook(wjm)
cur_month = time.strftime("%m", time.localtime())#取值月份
# 查看工作表
# data.sheet_names()
# print("sheets:" + str(data.sheet_names()))
# 通过文件名获得工作表,获取工作表Sheet
# table = data.sheet_by_name(Sheet1)
table =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) for x in col_B ]#文本转数字
# print(cel_A1)
# print(col_B)
# print("整行值:" + str(table.row_values(0)))
# print("整列值:" + str(table.col_values(0,1)))
# print("整列值:" + str(table.col_values(1,1)))
# print(col_A)

5、绘制条形图

#设置绘图时的,中文字符显示
#my_font=font_manager.FontProperties(fname=r"C:/Windows/Fonts/simhei.ttf", size=18)
plt.rcParams ['font.family']=['sans-serif']
plt.rcParams ['font.sans-serif']=['simhei' ]
plt.rcParams['font.size'] = '20'
plt.rcParams['xtick.labelsize']=16
plt.rcParams['ytick.labelsize']=16

#设置图形大小
plt.figure(figsize=(20,8),dpi=80)

#绘制条形图
plt.bar(range(len(col_A)),col_B)

#设置x轴
plt.xticks(range(len(col_A)),col_A)

plt.title(cur_month+"月份销售分布") #添加标题
plt.savefig("./sig_size3.png")#将图形保存到工程目录

plt.show()

结果展示

python从Oracle读取数据生成图表

以上就是python从Oracle读取数据生成图表的详细内容,更多关于python 生成图表的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python字典序问题实例
Sep 26 Python
python中map、any、all函数用法分析
Apr 21 Python
python实现中文转换url编码的方法
Jun 14 Python
python模块简介之有序字典(OrderedDict)
Dec 01 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
关于python 跨域处理方式详解
Mar 28 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python获取linux系统信息的三种方法
Oct 14 #Python
Python通过队列来实现进程间通信的示例
Oct 14 #Python
python利用xlsxwriter模块 操作 Excel
Oct 14 #Python
如何解决python多种版本冲突问题
Oct 13 #Python
Django配置Bootstrap, js实现过程详解
Oct 13 #Python
Python文件操作及内置函数flush原理解析
Oct 13 #Python
Django如何实现防止XSS攻击
Oct 13 #Python
You might like
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python人人网登录应用实例
2014/09/26 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
python实现双人五子棋(终端版)
2020/12/30 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
教师先进工作者事迹材料
2014/05/01 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server