python-读取mysql数据写入EXCEL(三)

需求

  • 读取mysql数据,使用SQL过滤数据
  • SQL结果追加数据到EXCEL 文件
# -*- coding: utf-8 -*-
"""
Created on   2021/12/29 16:44

@author: tange
"""

from sqlalchemy import create_engine
import pandas as pd
import time

curr_date = time.strftime("%Y%m%d", time.localtime())
print(curr_date)

res_path = "D:/code_fileAll/test_file/output/"
engine = create_engine("mysql+pymysql://root:[email protected]:3306/datax?charset=utf8mb4",
                       max_overflow=0,   # 超过连接池大小外最多创建的连接,为0表示超过5个连接后,其他连接请求会阻塞 (默认为10)
                       pool_size=5,      # 连接池大小(默认为5)
                       pool_timeout=30,  # 连接线程池中,没有连接时最多等待的时间,不设置无连接时直接报错 (默认为30)
                       pool_recycle=-1,  # 多久之后对线程池中的线程进行一次连接的回收(重置) (默认为-1)
                       encoding='utf-8',
                       echo=False  # 打印SQL语句
                       )
# 原始数据来源
OriginSql = """
select * from datax.datax_fdl ;
"""

allData = engine.execute(OriginSql)

res_file_name = f"mysql_{curr_date}.xlsx"

# 转化为DataFrame 并添加表头
df = pd.DataFrame(allData, columns=['id', 'lable', 'lable2', 'lable3', 'lable4', 'create_time', 'update_time'])
# 默认填充,会覆盖数据
df.to_excel(res_path + res_file_name
            , index=False
            , sheet_name='mysql'  # 表格名
            , na_rep=0  # 缺失值填充
            , header=None  # 不写入表头或者header=0
            )
# 复制上面的df数据
df2 = df.copy()
# 写入两个sheet内,不在在单一的sheet追加,
# 追加模式 注意engine引擎,官网没写出来,但是不加上,mode报错
with pd.ExcelWriter(res_path + res_file_name, mode='a', engine="openpyxl") as writer:
    df2.to_excel(writer, sheet_name='mysql', index=False)  # 会自动改名为mysql1 ,不用追加模式会覆盖上面的结果
    df2.to_excel(writer, sheet_name='mysql3', index=False)
    writer.close()

你可能感兴趣的:(python-读取mysql数据写入EXCEL(三))