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 相关文章推荐
Python3写入文件常用方法实例分析
May 22 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
对python文件读写的缓冲行为详解
Feb 13 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
python中wx模块的具体使用方法
May 15 Python
python获取命令行参数实例方法讲解
Nov 02 Python
总结Python连接CS2000的详细步骤
Jun 23 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
PHP中for循环语句的几种变型
2006/11/26 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python socket 套接字实现通信详解
2019/08/27 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
pytorch SENet实现案例
2020/06/24 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
Python同时迭代多个序列的方法
2020/07/28 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
python Xpath语法的使用
2020/11/26 Python
毕业生在校学习的自我评价分享
2013/10/08 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书