利用python实现从Oracle读取数据生成图表

  介绍

利用python实现从Oracle读取数据生成图表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强> 1,涉及到的python模块(模块安装就不进行解释了):

导入操作系统
  进口cx_Oracle
  进口openpyxl
  导入的时间
  导入csv
  进口xlrd
  从matplotlib进口pyplot plt
  从matplotlib进口font_manager 

<强> 2,连接数据库

甲骨文客户端要根据自己python对应的版本进行下载

导入操作系统
  os.environ [& # 39; NLS_LANG& # 39;]=& # 39;简化CHINESE_CHINA.UTF8& # 39;#字符转换,如果配置了环境变量这里可用不要
  os.environ [& # 39; TNS_ADMIN& # 39;]=& # 39; D: \ \ Python \ \ instantclient_12_2& # 39;#甲骨文客户端,如果配置了环境变量这里可用不要
  os.environ [& # 39; path & # 39;]=& # 39; D: \ \ \ \ Python instantclient_12_2& # 39;#自己电脑甲骨文客户端所在位置
  
  进口cx_Oracle
  
  #方法一:用户名:密码和监听分开写
  #康涅狄格州=cx_Oracle.connect(& # 39;用户名/password@host orcl # 39;) #连接数据库
  
  #方法二:用户名:密码和监听写在一起
  康涅狄格州=cx_Oracle.connect(& # 39;用户名/password@host: 1521/orcl # 39;) # utf - 8显示中文
  
  #方法三:配置监听并连接
  # tns=cx_Oracle.makedsn(& # 39;主机# 39;1521年,& # 39;orcl # 39;,编码=& # 39;utf - 8 # 39;, nencoding=癠TF-8")
  #康涅狄格州=cx_Oracle.connect(& # 39;用户名# 39;& # 39;密码# 39;,tns)
  
  卑鄙的人=conn.cursor() #获取游标
  打印头=True #在每个表的输出包含列标题
  sql=把≡馼.name,总和(a.tot_qty)从m_retail c_store b“;\
  “a.c_store_id=b。id和一个。由b.name" billdate=20200923组;# sql语句
  x=curs.execute (sql) #使用光标进行各种操作
  行=x.fetchall ()
  一行的行:
  print(行)

<强> 3,创建Excel文件,读取SQL文件,将数据写入Excel保存到本地

 def export_excel (sql,文件名):
  rr=curs.execute (sql)
  行=curs.fetchall ()
  
  #获取字段名
  title=(我在curs.description[0]我)
  
  #创建excel表
  世行=openpyxl.Workbook ()
  ws=wb.active
  
  #插入字段名到第一行
  c的范围(len(标题)):
  ws。细胞(1 c + 1值=https://www.yisu.com/zixun/title [c])
  
  #写入查询数据
  r的范围(len(行)):
  c的范围(len(行[r])):
  如果行[r] [c]: #值不为空时写入,空值不写入
  ws.cell (r + 2, c + 1,价值=str(行[r] [c])) # str()防止用科学计数法写入造成信息丢失
  #
  # #保存sql脚本
  # ws1=wb.create_sheet (sql)
  # ws1.cell(1, - 1,价值=sql)
  #
  wb.save(文件名)
  wb.close ()
  curs.close ()
  
  if __name__==癬_main__”:
  #方法一:用户名:密码和监听分开写
  #康涅狄格州=cx_Oracle.connect(用户名/password@host orcl) #连接数据库
  
  #方法二:用户名:密码和监听写在一起
  康涅狄格州=cx_Oracle.connect(用户名/password@host: 1521/ORCL) # utf - 8显示中文
  
  #方法三:配置监听并连接
  # tns=cx_Oracle。makedsn (orcl的“主人”,1521年,编码=皍tf - 8”, nencoding=皍tf - 8”)
  #康涅狄格州=cx_Oracle.connect (tns)“用户名”,“密码”,
  
  卑鄙的人=conn.cursor ()
  #打开sql文件获取sql语句
  张开(“零售查询。sql”,编码=皍tf - 8”)作为sql_0: #编码=' utf - 8”
  sql=sql_0.read ()
  # sql="选择b.name作为店仓,(一个求和。从m_retail tot_qty)数量,c_store b”/#“a.c_store_id=b。id和一个。billdate=20201010 group by b.name”
  cur_date=trftime (“Y % - % - % d”, time.localtime ()) #“Y % - % - % d % H % m % S”,取值日期
  wjm='零售2》+ cur_date +“.xlsx”
  wjm export_excel (sql)
  conn.close () 

<强> 4,打开刚刚保存的Excel文件,且读取需要的数据

 #打开文件
  data=https://www.yisu.com/zixun/xlrd.open_workbook (wjm)
  cur_month=trftime (“% m”, time.localtime()) #取值月份
  #查看工作表
  # data.sheet_names ()
  #打印(”表:“+ str (data.sheet_names ()))
  #通过文件名获得工作表,获取工作表板
  #表=data.sheet_by_name (Sheet1)
  表=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 (x)的col_B) #文本转数字
  #打印(cel_A1)
  #打印(col_B)
  #打印(“整行值:“+ str (table.row_values (0)))
  #打印(“整列值:“+ str (table.col_values (0,1)))
  #打印(“整列值:“+ str (table.col_values (1,1)))
  #打印(col_A) 

利用python实现从Oracle读取数据生成图表