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入门教程
Feb 08 Python
python使用百度翻译进行中翻英示例
Apr 14 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
Python 性能优化技巧总结
Nov 01 Python
django实现用户登陆功能详解
Dec 11 Python
python的Tqdm模块的使用
Jan 10 Python
python创建与遍历List二维列表的方法
Aug 16 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
详解python UDP 编程
Aug 24 Python
Python实现简单的猜单词小游戏
Oct 28 Python
Python Django搭建文件下载服务器的实现
May 10 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源代码
2009/08/21 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
使用PHP开发留言板功能
2019/11/19 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
Google韩国首页图标动画效果
2007/08/26 Javascript
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
使用ES6语法重构React代码详解
2017/05/09 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
Python数据类型详解(二)列表
2016/05/08 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
python实现简单猜单词游戏
2020/12/24 Python
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
整改通知书
2015/04/20 职场文书
领导视察通讯稿
2015/07/18 职场文书
调研报告的主要写法
2019/04/18 职场文书