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中处理时间的几种方法小结
Apr 09 Python
Python中返回字典键的值的values()方法使用
May 22 Python
python比较两个列表是否相等的方法
Jul 28 Python
Django自定义认证方式用法示例
Jun 23 Python
Python实现屏幕截图的两种方式
Feb 05 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
pandas通过索引进行排序的示例
Nov 16 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
Python tkinter模版代码实例
Feb 05 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 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
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
用python实现百度翻译的示例代码
2018/03/09 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
利用python实现逐步回归
2020/02/24 Python
Django框架请求生命周期实现原理
2020/11/13 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
ajax是什么及其工作原理
2012/02/08 面试题
中学生爱国演讲稿
2013/12/31 职场文书
电子商务自荐书范文
2014/01/04 职场文书
财产保全担保书
2015/01/20 职场文书
2015年大学生实习评语
2015/03/25 职场文书
公司出纳岗位职责
2015/03/31 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js