介绍
使用python实现查询MySQL并将数据写入Excel ?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
表结构如下:
创建表“用户”( “id”bigint (20) NOT NULL AUTO_INCREMENT, “用户名”varchar(50)核对utf8mb4_bin NOT NULL评论& # 39;用户名& # 39;, “密码”varchar(255)字符集utf8mb4默认空评论& # 39;密码& # 39;, “电话”varchar(20)字符集utf8mb4默认空评论& # 39;手机号& # 39;, “电子邮件”varchar(255)字符集utf8mb4默认空评论& # 39;邮箱& # 39;, ‘create_time datetime默认CURRENT_TIMESTAMP评论& # 39;创建时间& # 39;, 主键(“id”) )引擎=InnoDB的默认字符集=utf8mb4整理=utf8mb4_bin;
插入3行数据
插入“测试”。“用户”(“id”、“用户名”、“密码”、“电话”,“电子邮件”、“create_time”)值(& # 39;1 & # 39;& # 39;小# 39;,& # 39;123 & # 39;,& # 39;12345678910 & # 39;,& # 39;123 @qq.com& # 39;, & # 39; 2020-04-10 01:22:07& # 39;); 插入“测试”。“用户”(“id”、“用户名”、“密码”、“电话”,“电子邮件”、“create_time”)值(& # 39;2 & # 39;& # 39;张# 39;,& # 39;123 & # 39;,& # 39;12345678910 & # 39;,& # 39;123 @qq.com& # 39;, & # 39; 2020-04-10 01:22:07& # 39;); 插入“测试”。“用户”(“id”、“用户名”、“密码”、“电话”,“电子邮件”、“create_time”)值(& # 39;3 & # 39;& # 39;lisi # 39;, & # 39; 123 & # 39;, & # 39; 12345678910 & # 39;, & # 39; 123 @qq.com& # 39;, & # 39; 2020-04-10 01:22:07& # 39;);
<强>二,基本写法强>
安装模块
pip3安装xlwt pymysql
test_excel。py
# !/usr/bin/env python3 utf - 8编码: 进口操作系统 进口xlwt 进口pymysql 进口日期时间 类MysqlToExcel(对象): def __init__(自我): 自我。主机=& # 39;10.212.21.92& # 39; 自我。用户=& # 39;根# 39; 自我。passwd=& # 39;这样的# 39; 自我。db_name=& # 39;测试# 39; 自我。端口=3306 自我。file_name=& # 39; data.xls& # 39; def get_query_results(自我): 从test.users" sql=皊elect *; 康涅狄格州=pymysql.connect ( 主机=self.host, 用户=self.user, passwd=self.passwd,=self.port港 数据库=self.db_name, charset=& # 39; use utf8 # 39; cursorclass=pymysql.cursors.DictCursor ) 坏蛋=conn.cursor() #创建游标 cur.execute (sql) #执行sql命令 结果=cur.fetchall() #获取执行的返回结果 #输出(结果) cur.close () conn.close() #关闭mysql连接 返回结果 def generate_table(自我): “““ 生成excel表格 返回: “““ #删除已存在的文件 如果os.path.exists (self.file_name): os.remove (self.file_name) 结果=self.get_query_results () #输出(结果) 如果没有结果: print(“查询结果为空“) 返回假 #创建excel对象 f=xlwt.Workbook () sheet1=f.add_sheet (& # 39; Sheet1& # 39;, cell_overwrite_ok=True) #列字段 column_names=[& # 39; id # 39; & # 39;用户名# 39;,& # 39;密码# 39;,& # 39;电话# 39;,& # 39;电子邮件# 39;】 #写第一行,也就是列所在的行 因为我在范围(0,len (column_names)): sheet1。写(0,我,column_names[我]) #写入多行 num=0 #计数器 我的结果: sheet1。写(num + 1, 0,我[& # 39;id # 39;]) sheet1。写(num + 1, 1,我[& # 39;用户名# 39;]) sheet1。写(num + 1, 2,我[& # 39;密码# 39;]) sheet1。写(num + 1, 3,我[& # 39;电话# 39;]) sheet1。写(num + 1, 4,我[& # 39;电子邮件# 39;]) #日期转换为字符串 值=https://www.yisu.com/zixun/i [' create_time '] .strftime (“Y % - % - % d % H: % m: % S ') sheet1。写(num + 1 5值) num +=1 #自增1 #保存文件 f.save (self.file_name) #判断文件是否存在 如果不是os.path.exists (self.file_name): 打印(“生成excel失败”) 返回假 打印(“生成excel成功”) 还真 if __name__==癬_main__”: .generate_table MysqlToExcel () ()
执行输出:
查看excel表