pandas用for循环写入excel不覆盖原工作页的研究

本文介绍了作者在使用pandas将MySQL查询结果写入Excel时,通过for循环实现不覆盖原有工作表的过程。起初遇到问题,通过不断研究解决了在追加模式下仅保存最后一个工作表的问题,最终通过if判断在首次写入时不使用mode='a',避免覆盖。作者期待更好的解决方案。
摘要由CSDN通过智能技术生成

        一直从csdn参考大神们的文章,自己从来没发表过。最近新学python,有点心得,来这里记录分享一下。本人非程序员,学习python只是个人兴趣爱好而已,文中如有不妥之处,大神们见谅。

        先说说我的需求:客户要求每周出一个excel报表,数据格式是一样的。只是数据会每周不同而已。原本是自己写了个mysql语句做查询后,复制粘贴到excel里,然后邮件发送。如此长期工作后,突然发现,这个重复劳动完全可以用python去执行。于是就有了本文的研究。

        mysql总共有7张表内容,对应复制粘贴到excel的7个页(sheet)。原本我的代码是:

import os
import pandas
from datetime import datetime
from sqlalchemy import create_engine
from openpyxl.utils import get_column_letter
from openpyxl import load_workbook, workbook

# 整理当前时间
now = datetime.now()
date_time = now.strftime("%Y.%m.%d_%H.%M.%S")
print(date_time)

# 设置数据库连接(host='MySQL服务器地址',port=端口,user='用户名',passwd='密码',db='库名',charset='编码')
# 新式连接方式
MYSQL_HOST = 'mysql的IP地址'
MYSQL_PORT = 'mysql的端口'
MYSQL_USER = '用户名'
MYSQL_PASSWORD = '密码'
MYSQL_DB = 'mysql库名'
conn = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8' % (MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, MYSQL_DB))

# 编辑SQL语句
sql01 = 'SELECT * FROM xx.`表01`'
sql02 = 'SELECT * FROM xx.`表02`'
sql03 = 'SELECT * FROM xx.`表03`'
sql04 = 'SELECT * FROM xx.`表04`'
sql05 = 'SELECT * FROM xx.`表05`'
sql06 = 'SELECT * FROM xx.`表06`'
sql07 = 'SELECT * FROM xx.`表07`'

# 打印表内容,纯粹看看而已
sql_data01 = pandas.read_sql_query(sql01,conn)
print(sql_data01)

sql_data02 = pandas.read_sql_query(sql02,conn)
print(sql_data02)

sql_data03 = pandas.read_sql_query(sql03,conn)
print(sql_data03)

sql_data04 = pandas.read_sql_query(sql04,conn)
print(sql_data04)

sql_data05 = pandas.read_sql_query(sql05,conn)
print(sql_data05)

sql_data06 = pandas.read_sql_query(sql06,conn)
print(sql_data06)

sql_data07 = pandas.read_sql_query(sql07,conn)
print(sql_data07)

# 检查是否存在同名excel
excelfile = str(date_time)+"xx.xlsx"
if os.path.exists(excelfile):
    print("已存在"+ex
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值