看了@lose《python 自定义漂亮的 excel 结果测试报告 》一文,下面代码中也有不少借鉴文章的内容,非常感谢,侵删
突然想到每周统计上线类型,都要手动计算统计,心很累
遂突发奇想,直接从数据库中获取信息,自定义表格后输出报告
ps:我司上线通过禅道,文档这一标签来管理,所以上线信息可从数据中获取
话不多说,先上最终呈现的成果,后面上代码
前提:
由于禅道是部署在另一台机器上的,本地直接连数据库是连不上的,需要先加用户才能够在本地连上
代码主要分为两部分:
1.python 连接 mysql 数据库,读取信息
2.自定义表格,并输出读取到的信息
#连接数据库,
db=MySQLdb.connect('172.xx.x.xxx','xxx','123456','zentao')
cursor = db.cursor()
cursor.execute('SET NAMES UTF8')
#查询上线类型次数 749:标准版本 748:替换文件
cursor.execute("SELECT COUNT(*) FROM zt_doc WHERE module = '749' and deleted= '0' and addedDate >'2017-1-7' and addedDate < '2017-1-12'")
results1=cursor.fetchall()
for result1 in results1:
print u'标准版本:'+str(result1[0])
cursor.execute("SELECT COUNT(*) FROM zt_doc WHERE module = '748' and deleted= '0' and addedDate >'2017-1-7' and addedDate < '2017-1-12'")
results2=cursor.fetchall()
for result2 in results2:
print u'替换文件:'+str(result2[0])
cursor.execute("SELECT COUNT(*) FROM zt_doc WHERE deleted= '0' and addedDate >'2017-1-7' and addedDate < '2017-1-12'")
results3=cursor.fetchall()
for result3 in results3:
print u'总次数:'+str(result3[0])
因为查询结果中有中文,需要加上 set names utf8
或者在 db.connect,最后面加上 charset='utf8'
#新增报告
today=time.strftime("%y-%m-%d")
filename='./'+today+'report.xlsx'
workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet('summary')
#设置格式
format_center=workbook.add_format({'bold': True, 'bg_color': 'blue','align':'center','valign':'vcenter','font_size':'16','border':1})
format1=workbook.add_format({'bold':True,'align':'center','valign':'vcenter','border':1})
format2=workbook.add_format({'bold':True,'border':1,'align':'center'})
worksheet.set_row(0,30)
worksheet.set_column("A:A",15)
worksheet.set_column("B:B",10)
worksheet.set_column("C:C",14)
worksheet.write('A3',u'上线类型',format1)
worksheet.write('B3',u'次数',format1)
worksheet.write('A4',u'替换文件',format1)
worksheet.write('B4',result2[0],format1)
worksheet.write('A5',u'标准版本',format1)
worksheet.write('B5',result1[0],format1)
worksheet.write('A6',u'合计',format1)
worksheet.write('B6',result3[0],format1)
#新建图表
chart1=workbook.add_chart({'type':'column'})
chart1.add_series({
'name':u'次数',
'categories':'=summary!$A$4:$A$6',
'values':'=summary!$B$4:$B$6',
'fill': {'color':'#FF9900'},
})
chart1.set_x_axis({
'name':u'上线类型',
'name_font':{'size':12},
})
chart1.set_y_axis({
'name':u'上线次数',
'name_font':{'size':12,'bold':True},
'num_font':{'italic':True},
})
chart1.set_title({'name': u'本周上线类型分析'})
chart1.set_style(3)
worksheet.insert_chart('D3',chart1)
#写入上线负责人
cursor.execute("SELECT editedBy FROM zt_doc WHERE deleted= '0' and addedDate >'2017-1-7' and addedDate < '2017-1-12' ORDER BY addedDate;")
results6=cursor.fetchall()
rows3=len(results6)
for i in range(rows3):
worksheet.write(i+15,2,str(results6[i])[2:-3],format2)
暂时 sql 语句中时间每次执行需要手动修改,目前还没有想到解决方案,欢迎有想法的朋友给出指导意见
以上所有,欢迎批评指正,交流学习
最后再次感谢@lose