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是下图 数据已处理 明天执行时候会先删除今天执行生成的文件