使用python生成oracle数据报表

  • 2020 年 1 月 10 日
  • 笔记

#!/usr/bin/env python  #coding:utf-8  # cx_Oracle 用于访问oracle和导出数据  import cx_Oracle  # xlsxwriter 用于生成xlsx文件  import xlsxwriter  import time  import sys  # 导入邮件模块  from email.mime.text import MIMEText  from email.mime.multipart import MIMEMultipart  import smtplib     reload(sys)  sys.setsys.setdefaultencodingdefaultencoding("gbk")     #修改默认编码为“gbk”,解决中文编码问题 不进行设置会出现 UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position 36: ordinal not in range(128)     con = cx_Oracle.connect("comm/12345678@orcl")  cursor = con.cursor()     #定义SQL脚本 由于脚本包含中文,使用decode('utf-8').encode('gbk') 对其进行转换  sql ='''  select count 收费金额,       locate 分中心  from business  '''.decode('utf-8').encode('gbk')     query1 = cursor.execute(sql)   #执行查询     title = [i[0] for i in query1.description]     date_now=time.strftime("%Y%m%d",time.localtime())     #文件名及其路径     report_name='/excel/' + "业务数据".decode('utf-8').encode('gbk') + date_now + '.xlsx'     #生成xlsx格式oracle查询统计报表     workbook = xlsxwriter.Workbook(report_name, {'constant_memory': True})  worksheet = workbook.add_worksheet()  print time.ctime()  data = cursor.fetchall()  print time.ctime()  worksheet.write_row(0, 0, title)  for row, row_date in enumerate(data):      worksheet.write_row(row+1, 0, row_date)  print time.ctime()  cursor.close()  con.close()  workbook.close()     #以下代码实现发送邮件     msg = MIMEMultipart()     #定义附件名     att1_name="业务数据".decode('utf-8').encode('gbk') + date_now + '.xlsx'      #读入附件,report_name     att1 = MIMEText(open(report_name, 'rb').read(), 'base64', 'gb2312')  att1["Content-Type"] = 'application/octet-stream'  att1["Content-Disposition"] = 'p_w_upload; filename=%s' % att1_name.encode('gbk')  msg.attach(att1)     msg['to'] = '[email protected]'  msg['from'] = '[email protected]'  msg['subject'] = "每周业务数据".decode('utf-8').encode('gbk')  try:      server = smtplib.SMTP()      server.connect('mail.126.com')      server.login('[email protected]','12345678')#      server.sendmail(msg['from'], msg['to'],msg.as_string())      server.quit()      print 'successful.'  except Exception, e:      print str(e)