【python读取mysql数据导出excel文档】

开发环境

python: 3.9
PyMySQL: 1.0.2
xlwt: 1.3.0

repositories

https://pypi.python.org/simple
https://mirrors.aliyun.com/pypi/simple/

开发文件

mysql-config.json

{
  "file_type": "excel",
  "mysql_config_dict": {
    "ip": "127.0.0.1",
    "port": 3306,
    "username": "root",
    "password": "root",
    "database_name": "eployment_info"
  }
}

sqlFile.sql

select * from employee_info;

tableTitle.txt

员工姓名
入职日期
工资
性别

excelUtil.py

from datetime import datetime
import xlwt
import sys
import json

from pymysql.cursors import DictCursor

import pymysql
import logging

import datetime  # 导入日期时间模块


def write_data_to_excel(name, result, titlelist):
    # 实例化一个Workbook()对象(即excel文件)
    wbk = xlwt.Workbook(encoding='utf-8')
    # 新建一个名为Sheet1的excel sheet。此处的cell_overwrite_ok =True是为了能对同一个单元格重复操作。
    sheet = wbk.add_sheet('Sheet1', cell_overwrite_ok=True)

    today = datetime.date.today()  # 获得今天的日期
    yesterday = today - datetime.timedelta(days=1)

    for i in range(len(result)):
        # 对result的每个子元素作遍历,
        if i == 0:
            for x in range(len(titlelist)):
                sheet.write(0, x, titlelist[x])
            continue
        for j in range(len(result[i])-1):
            # 将每一行的每个元素按行号i,列号j,写入到excel中。
            print(f'result[i]: {result[i]}')
            print(f'result[j]: {result[i][j]}')
            cell_entity = result[i][j+1]

            if isinstance(cell_entity, datetime.datetime):
                print(f'{cell_entity} is date')
                cell_entity = result[i][j+1].strftime('%Y-%m-%d %H:%M:%S')

            sheet.write(i, j, cell_entity)
    # 以传递的name+当前日期作为excel名称保存。
    wbk.save(name + str(yesterday) + '.xls')

def execute_sql_list(sql_str, kcursor_entity):
    logging.debug(f"start to execute_sql_list! sql: {sql_str}")
    # 执行sql语句
    kcursor_entity.execute(sql_str)
    # 使用 fetchall() 方法获取全部数据
    result_list = kcursor_entity.fetchall()
    return list(result_list)

# 读取json文件
def read_json(mysql_config_file_name):
    try:
        if not mysql_config_file_name:
            config_file = "mysql_config.json"
        else:
            config_file = mysql_config_file_name
        parse_json = open(f"{config_file}", "r", encoding="utf-8").read()
        data = json.loads(parse_json)
        mysqlConfigDict = {}
        mysqlConfigDict["ip"] = data["mysql_config_dict"]["ip"]
        mysqlConfigDict["port"] = data["mysql_config_dict"]["port"]
        mysqlConfigDict["username"] = data["mysql_config_dict"]["username"]
        mysqlConfigDict["password"] = data["mysql_config_dict"]["password"]
        mysqlConfigDict["database_name"] = data["mysql_config_dict"]["database_name"]
        return mysqlConfigDict
    except Exception as e:
        logging.error(e)

def getSqlStr():
    # sql文件名, .sql后缀的
    sql_file = 'sqlFile.sql'
    # 读取 sql 文件文本内容
    sql = open(sql_file, 'r', encoding='utf8')
    sqltxt = sql.readlines()
    # 此时 sqltxt 为 list 类型
    # 读取之后关闭文件
    sql.close()
    # list 转 str
    sqlStr = "".join(sqltxt)
    return sqlStr

def getTableTitle(table_title_file_name):
    if not table_title_file_name:
        table_title_file = 'tableTitle.txt'
    else:
        table_title_file = table_title_file_name
    title_list = []
    try:

        titleFile = open(table_title_file, 'r', encoding='utf8')
        title_list = titleFile.readlines()
        titleFile.close()
        for i in range(len(title_list)):
            title_entity = title_list[i].replace('\n','').replace('\r','')
            title_list[i] = title_entity
    except Exception as e:
        logging.error(e)
    return title_list

if __name__ == '__main__':

    logging.info("start to execute main method!")
    mysql_config_file_name = ''
    table_title_file_name = ''
    try:
        executeArgvList = sys.argv
        if len(executeArgvList) < 2:
            logging.info('executeArgvList is empty!')
        else:
            argv = executeArgvList[1]
            env = executeArgvList[2]
            logging.info(f'argv: {argv}; env: {env}')
        mysql_config_file_name = ''
        table_title_file_name = ''
    except Exception as e:
        logging.error(e)

    # 读取配置文件信息
    mysqlConfigDict = read_json(mysql_config_file_name)

    try:
        # 打开数据库连接
        employee_conn = pymysql.connect(host = mysqlConfigDict['ip'], user = mysqlConfigDict['username'], password = mysqlConfigDict['password'],
                                     database = mysqlConfigDict['database_name'], port = mysqlConfigDict['port'])
    except Exception as e:
        logging.error("连接数据库失败", e)
        logging.exception(sys.exc_info())
        exit(-1)

    # 使用cursor()方法获取操作游标
    kcursor_employee = employee_conn.cursor(DictCursor)

    sqlStr = getSqlStr()
    print(f'sqlStr-------------> {sqlStr}')

    result_list = execute_sql_list(sqlStr, kcursor_employee)
    if not len(result_list):
        logging.info('result_list is empty!')
        exit(-1)
    #获取结果集标题
    resultKeys = result_list[0]
    resultKeys = list(resultKeys)

    titleList = getTableTitle(table_title_file_name)
    if not titleList:
        titleList = resultKeys

    logging.info(f'resultKeys: {resultKeys}')

    list = [[] for i in range(len(resultList))]
    print(f'{list}')

    for i in range(len(resultList)):
        result_entity = resultList[i]
        list[i].append(result_entity)
        for key in resultKeys:
            list[i].append(result_entity[key])
    
    print(f'{list}')
    name = 'employmentInfo'
    write_data_to_excel(name, list, titleList)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值