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解析网页源代码中的115网盘链接实例
Sep 30 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
python文件名和文件路径操作实例
Sep 29 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
python解析xml简单示例
Jun 21 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
能让Python提速超40倍的神器Cython详解
Jun 24 Python
总结python多进程multiprocessing的相关知识
Jun 29 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
php代码架构的八点注意事项
2016/01/25 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
python实现的一个火车票转让信息采集器
2014/07/09 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Python 元类实例解析
2018/04/04 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
一套VC试题
2015/01/23 面试题
研究生求职推荐信范文
2013/11/30 职场文书
违纪检讨书2000字
2014/02/08 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
贷款委托书怎么写
2014/08/02 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
总经理司机岗位职责
2015/04/10 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
Python 文本滚动播放器的实现代码
2021/04/25 Python
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
如何基于python实现单目三维重建详解
2022/06/25 Python