zoukankan      html  css  js  c++  java
  • Python 2.7_初试连接Mysql查询数据导出到excel_20161216

    由于每天到公司都需要先执行一遍检测操作,观察数据是否导入完整,今天想到能否自动连接Mysql执行SQL并导出数据,每天到公司直接查看excel文件即可

    时间紧,代码初次试验,边摸索边学习吧。

    xlsxwriter 模块及excel格式设置的format()方法参考这里http://xlsxwriter.readthedocs.io/format.html 

    #coding:utf-8
    import time
    import datetime
    import os
    import MySQLdb
    import xlsxwriter
    #因为数据只更新到昨日 因此命名以昨日所在的年月日命名 同时今天执行时候删除昨日的文件
    starttime=time.time()
    yestoday= datetime.date.today()-datetime.timedelta(days=1)
    beforeyestoday= datetime.date.today()-datetime.timedelta(days=2)
    oldfile=str(beforeyestoday)+'.xlsx'
    newfile=str(yestoday)+'.xlsx'
    #删除昨日执行文件
    if os.path.isfile(oldfile):
        os.remove(oldfile)
    else:
        pass
    #当天如果多次测试 将当天文件也删除 测试通过 条件判断可删除
    if os.path.isfile(newfile):
        os.remove(newfile)
    else:
        pass
    #连接mysql 返回数据集对象
    def getdata():
        conn = MySQLdb.connect(host='服务器IP地址', user='root', passwd='密码', db='local_db', port=3306, charset='utf8')
        cursor = conn.cursor()
        test_sql = '''
            SELECT DATE(订单日期) AS 订单日期,SUM(金额) AS 总计 ,SUM(IF(城市="北京",金额,NULL)) AS 北京,SUM(IF(城市="成都",金额,NULL)) AS 成都
           ,SUM(IF(城市="杭州",金额,NULL)) AS 杭州,SUM(IF(城市="济南",金额,NULL)) AS 济南,SUM(IF(城市="长春",金额,NULL)) AS 长春
           ,SUM(IF(城市="青岛",金额,NULL)) AS 青岛,SUM(IF(城市="南京",金额,NULL)) AS 南京,SUM(IF(城市="郑州",金额,NULL)) AS 郑州
           ,SUM(IF(城市="西安",金额,NULL)) AS 西安
            FROM a003_order
            WHERE 金额>0 AND 订单日期>=DATE_ADD(CURRENT_DATE,INTERVAL -15 DAY) AND 订单日期<CURRENT_DATE
            GROUP BY DATE(订单日期)
        '''
        count=cursor.execute(test_sql)
        data=cursor.fetchall()
        fields = cursor.description
        cursor.close()
        conn.close()
        #将数据集的表头和数据集记录传入一个字典 并返回 以便下面函数调用
        dict={}
        dict['fields']=fields
        dict['data']=data
        return dict
    #获取数据集后取出记录写入excel
    def write_excel():
        #调用getdata()函数 将getdata()函数返回的数据集赋值给变量fields 和 data 对data进行取出数据记录操作
        dict=getdata()
        #获取表头
        fields=dict['fields']
        #获取数据集
        data = dict['data']
        workbook = xlsxwriter.Workbook(newfile)
        worksheet = workbook.add_worksheet('data')
        #表头格式
        format1 = workbook.add_format({'bold': True, 'font_color': 'red','font_size':11,'align':'left','font_name':u'宋体'})
        #日期A列区域
        format2 = workbook.add_format({ 'font_color': 'black', 'font_size': 9,'align':'left','num_format':'yyyy-mm-dd','font_name':u'宋体'})
        #除日期A列外数值区域
        format3 = workbook.add_format({'font_color': 'black', 'font_size': 9, 'align': 'left','font_name':u'宋体'})
        #A列列宽设置能更好的显示
        worksheet.set_column("A:A", 9)
        #插入第一行表头标题
        for i in range(0, len(fields)):
            field = fields[i][0]
            worksheet.write(0, i, field.decode('utf-8'),format1)
        #插入15行第一列 订单日期 日期取字符型
        for j in range(0, 15):
            worksheet.write(j + 1, 0, str(data[j][0]).decode('utf-8'),format2)
        #插入15行第2-10列 数字取整数
        for x in range(0, 15):
            for y in range(1, 11):
                db = int(data[x][y])
                worksheet.write(x+1 , y, db,format3)
        workbook.close()
        return "写入成功"
    print write_excel()
    endtime=time.time()
    print "用时"+str(endtime-starttime)+"s"
    

     执行导出到excel是下图 数据已处理 明天执行时候会先删除今天执行生成的文件

     

  • 相关阅读:
    Node+OBS直播服务器搭建总结
    WebRTC网页录制音视频教程
    人生有尺 做人有度
    「道 德 經」 : 第 二 十 四 章
    看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。
    「道 德 经」 : 第 八 章
    Ubuntu下安装Chrome浏览器的两个方法
    chromium中增加自己的文件夹
    chromium 切换主分支的方法
    chromium 示例
  • 原文地址:https://www.cnblogs.com/Mr-Cxy/p/6188894.html
Copyright © 2011-2022 走看看