使用python生成oracle数据报表

发布时间:2019-08-28 09:11:06编辑:auto阅读(1619)

    #!/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'] = 'boss@126.com'
    msg['from'] = 'report@126.com'
    msg['subject'] = "每周业务数据".decode('utf-8').encode('gbk')
    try:
        server = smtplib.SMTP()
        server.connect('mail.126.com')
        server.login('report@126.com','12345678')#
        server.sendmail(msg['from'], msg['to'],msg.as_string())
        server.quit()
        print 'successful.'
    except Exception, e:
        print str(e)


关键字