Python制作Exce报表并打包

  1. 一、缘由
  2. 二、环境
  3. 三、代码实现
  4. 四、将python脚本打包成exe文件

一、缘由

在公司报表系统没有出来之前,每日运营数据的需求由运维或者DBA查数据库手动拉取,徒增工作量。

故考虑做一个exe文件,让产品童鞋点一下就自动生成一个包含昨日的数据的Excel表格,省心省力。

二、环境

Win10 + Pycharm + Python3.7 + pymysql + openpyxl + pyinstaller

说明:

  1. 因为办公环境是windows,如果是Linux、Mac则可以设置定时任务来自动跑Python脚本
  2. openpyxl模块,用来处理excel文档,操作简单,功能强大
  3. pyinstaller模块,可以将python脚本打包成exe程序,还可以加密除入口函数外的pyhon脚本。

三、代码实现

import pymysql
import time
from openpyxl import Workbook

# MySQL查询函数
def query_db(sql):
    conn = pymysql.connect(host='1.1.1.1',
                           port=3306,
                           user='test_ro',
                           password='$uT%8ono',
                           db='test',
                           cursorclass=pymysql.cursors.DictCursor
                           )

    with conn.cursor() as cursor:
        # 为了避免SQL注入,生产环境这里不要直接传入SQL,要带参数的拼接形式
        cursor.execute(sql)
        result = cursor.fetchall()

    conn.close()
    return result

# 处理多个SQL查询语句,并将结果拼接成包含多个字典的列表
def handle_result():
    # 获得昨天的日期
    yesterday_time = time.localtime(time.time()-86400)
    yesterday = time.strftime('%Y-%m-%d', yesterday_time)
    res_list = [{'日期': '{}'.format(yesterday)}, ]
    sql_list = [
        "SELECT COUNT(*) AS '累计进件总笔数' FROM ( SELECT COUNT(*) FROM test_apply_account WHERE apply_date < '{} 23:59:59' GROUP BY cert_no) A".format(yesterday),
        "SELECT count(*) AS '当日进件总笔数' FROM (SELECT count(*) FROM test_apply_account WHERE apply_date BETWEEN '{} 00:00:00' AND '{} 23:59:59' GROUP BY cert_no) A".format(yesterday, yesterday),
        "SELECT  count(*) as '当日授信总笔数数' FROM test_credit_apply WHERE credit_date BETWEEN '{} 00:00:00' AND '{} 23:59:59'".format(yesterday, yesterday),
        "SELECT count(*) as '当日授信通过笔数' FROM test_credit_apply WHERE credit_date BETWEEN '{} 00:00:00' AND '{} 23:59:59' AND credit_status='SUCCESS'".format(yesterday, yesterday),
    ]

    for sql in sql_list:
        res = query_db(sql)
        res_list += res

    return res_list

# 将拼接好的数据写入excel,以新建excel表格的形式
def write_excel(data):
    wb = Workbook()
    wb.create_sheet('XX每日数据', 0)
    sheet = wb.active
    i = 1
    for item in data:
        sheet.cell(row=1, column=i, value=list(item.keys())[0])
        sheet.cell(row=2, column=i, value=list(item.values())[0])
        i += 1

    wb.save('xx_everyday.xlsx')


if __name__ == '__main__':
    res_list = handle_result()
    write_excel(res_list)

四、将python脚本打包成exe文件

这里使用pyinstaller模块,具体命令为:

pyinstaller -F -c --key 123456 main.py

参数解释:

  1. -F 打包成单个exe文件,相反的参数为-D
  2. -c 显示cmd控制台,相反的参数为-w
  3. –key 密钥,加密打包,但是只对引入的库文件进行加密,所以建议main.py中只写入口函数,其他的函数进行引用
  4. 这样的加密基本安全,要想完全反编译,没点水平很难做到。

注意:pyinstaller 加密需要tinyaes包,tinyaes又依赖于Microsoft Visual C++,C++也要安装Win10 SDK。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com

×

喜欢就点赞,疼爱就打赏