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使用Berkeley DB数据库实例
Sep 26 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
python中的&&及||的实现示例
Aug 07 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
python的等深分箱实例
Nov 22 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
基于Django集成CAS实现流程详解
Nov 28 Python
Python 数据可视化之Matplotlib详解
Nov 02 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
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
django2 快速安装指南分享
2018/01/05 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
一个入门级python爬虫教程详解
2021/01/27 Python
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
会议室管理制度范本
2015/08/06 职场文书
六年级情感作文之500字
2019/10/23 职场文书
微信小程序和php的登录实现
2021/04/01 PHP