每日定点将excel数据批量插入mysql数据库对应表
最近在研究利用Metabase+MySQL实现excel数据的页面呈现,但excel数据每天需要手工上传真的很烦人,所以在网上参考各路大神,用Python实现了excel数据的每日自动上传至MySQL数据库。
思路分为三步:
先导入模块:
import pymysql
import pandas as pd
import os
import time
from datetime import datetime
第一步:定义一个可以获取指定文件夹中的所有excel路径名的函数:
file_name = []
dir_name = []
def get_file(file_dir):for parent, dirnames, filenames in os.walk(file_dir):# 第一个参数是文件夹路径,第二个参数是文件名,第三个参数是文件夹for filename in filenames:a = os.path.join(parent, filename)file_name.append(a)#这一部分是返回当前文件夹的子文件夹名,后续未用到:for dirname in dirnames:b = os.path.join(parent, dirname)dir_name.append(b)# 文件夹名return file_name
第二步: 定义一个指定excel文件所有sheet批量导入mysql的函数
def pro(path):#获取excel文件对象date_xls = pd.ExcelFile(path)# print(date_xls)#for循环遍历所读excel中的sheetfor sheetname in date_xls.sheet_names:#将sheet数据读取为dataframedf=pd.DataFrame(pd.read_excel(open(path,'rb'),sheet_name=sheetname))df=df.fillna(0)#将dataframe转为元组列表数据,execute函数导入mysql用pro1=df.apply(lambda x:tuple(x),axis=1).values.tolist()# print(pro1)#读取字段名,同时将列表格式转为字符串格式cl=df.columns.tolist()#计算字段个数b=df.columns.size#计算行数c=df.shape[0]#计算列数l=df.shape[1]#设置空字符串zhanweifu = ""clname =""#将字符串拼接,实现需要的SQL语句,此处需注意"`"是键盘ESC下方的按键for i in range(0, b - 1):zhanweifu = zhanweifu + "%s,"clname=clname+"`"+str(cl[i])+"`"+","zhanweifu = zhanweifu + "%s"clname=clname+"`"+str(cl[b-1])+"`"sheetname="`"+sheetname+"`"# 游标方法conn = pymysql.connect(host="localhost",user="root",password="123456",db="damaomao",port=3306,charset='utf8')# 获取游标cs = conn.cursor()#注意点:excel中的sheet名必须与mysql中的表名一致,sheet字段名必须与mysql表中字段名一致sql = "insert into " +sheetname + "(" + clname + ")" + " values" + "(" + zhanweifu + ")"# print(sql)try:#批量插入cs.executemany(sql,pro1)conn.commit()except UnicodeEncodeError:print('插入failed')conn.rollback()finally:conn.close()print('退出')
第三步:结合两个函数,实现指定文件夹所有excel表中数据的定时批量导入:
if __name__ == '__main__':# 调用函数#返回文件夹中所有excel文件名get_file(r'C:\Users\Desktop\TJ_Morningmeeting\自动导入\11.06')Now_time=datetime.now()Now_date=Now_time.daywhile True:if Now_time.minute+Now_time.hour*60>8*60+5 and Now_date<=datetime.now().day:#for循环将所有excel的所有sheet批量导入for i in file_name:pro(i)Now_date=Now_date+1print(Now_date)time.sleep(60)
话不多说,上完整代码:
import pymysql
import pandas as pd
import os
import time
from datetime import datetimefile_name = []
dir_name = []
def get_file(file_dir):for parent, dirnames, filenames in os.walk(file_dir):# 第一个参数是文件夹路径,第二个参数是文件名,第三个参数是文件夹for filename in filenames:a = os.path.join(parent, filename)file_name.append(a)for dirname in dirnames:b = os.path.join(parent, dirname)dir_name.append(b)# 文件夹名return file_name
def pro(path):#获取excel文件对象date_xls = pd.ExcelFile(path)# print(date_xls)#for循环遍历所读excel中的sheetfor sheetname in date_xls.sheet_names:#将sheet数据读取为dataframedf=pd.DataFrame(pd.read_excel(open(path,'rb'),sheet_name=sheetname))df=df.fillna(0)#将dataframe转为元组列表数据,execute函数导入mysql用pro1=df.apply(lambda x:tuple(x),axis=1).values.tolist()# print(pro1)#读取字段名,同时将列表格式转为字符串格式cl=df.columns.tolist()#计算字段个数b=df.columns.size#计算行数c=df.shape[0]#计算列数l=df.shape[1]#设置空字符串zhanweifu = ""clname =""#将字符串拼接,实现需要的SQL语句,此处需注意"`"是键盘ESC下方的按键for i in range(0, b - 1):zhanweifu = zhanweifu + "%s,"clname=clname+"`"+str(cl[i])+"`"+","zhanweifu = zhanweifu + "%s"clname=clname+"`"+str(cl[b-1])+"`"sheetname="`"+sheetname+"`"# 游标方法conn = pymysql.connect(host="localhost",user="root",password="123456",db="damaomao",port=3306,charset='utf8')# 获取游标cs = conn.cursor()#注意点:excel中的sheet名必须与mysql中的表名一致,sheet字段名必须与mysql表名一致sql = "insert into " +sheetname + "(" + clname + ")" + " values" + "(" + zhanweifu + ")"# print(sql)try:#批量插入cs.executemany(sql,pro1)conn.commit()except UnicodeEncodeError:print('插入failed')conn.rollback()finally:conn.close()print('退出')if __name__ == '__main__':# 调用函数#返回文件夹中所有excel文件名get_file(r'C:\Users\Desktop\TJ_Morningmeeting\自动导入\11.06')Now_time=datetime.now()Now_date=Now_time.daywhile True:if Now_time.minute+Now_time.hour*60>8*60+5 and Now_date<=datetime.now().day:#for循环将所有excel的所有sheet批量导入for i in file_name:pro(i)Now_date=Now_date+1print(Now_date)time.sleep(60)
每日定点将excel数据批量插入mysql数据库对应表相关推荐
- 将excel数据批量插入到数据库表中
项目实例结构: 1.model实体类 package com.model;public class Test {private int num1;private String num2;private ...
- POI和EasyExcel实现Excel数据批量读取到数据库
POI和easyExcel讲解 目的:这一部分我主要是为了实现excel数据批量插入到数据库. 参考:狂神说java的上课笔记 视屏教学网址 常用信息 1,将用户信息导出为excel表格 2,讲Exc ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...
- php导入excel先检查,php 如何在导入Excel数据时检查Mysql数据库内容是否存在,避免重复录入?:怎么样筛选excel表格重复的数据库...
php 如何在导入Excel数据时检查Mysql数据库内容是否存在,避免重复录入? 如果不想每询一次以提前做一个统询 $sql=mysql_query("select distinct Co ...
- java 农历的编写保存数据批量插入到数据库中
java 农历的编写保存数据批量插入到数据库中 1.阴历转农历的工具类 public class Nongli {private static int monCyl, dayCyl, yearCyl; ...
- vue excel导入mysql详细教程_Vue前端上传EXCEL文件,后端(springBoot+MyBatis+MySQL)解析EXCEL并批量插入/更新数据库...
文章目录 Vue前端 后端 controller层 service层:如何解析Excel文件 MyBatis:实现批量插入 在mysql中设置唯一索引Unique Index MySQL中的inser ...
- 1亿条数据批量插入 MySQL,哪种方式最快
利用JAVA向Mysql插入一亿数量级数据-效率测评 这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数 ...
- 1亿条数据批量插入 MySQL,哪种方式最快?
这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论. 所以通过随 ...
- 面试官:1亿条数据批量插入 MySQL,哪种方式最快?
这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论. 所以通过随 ...
最新文章
- python下载代码-Python3----下载小说代码
- 【联邦学习】FATE 集群部署 step3
- 如何准备电赛?19年电赛经验总结!
- 和为s的两个数字 - 双指针
- Http请求返回最外层的模型
- apache和php结合、apache的默认虚拟主机
- Setup Factory 点击uninstall.exe Invalid start mode : archive filename
- CPU内存乱序访问与内存屏障
- 诺,你们要的Python进阶来咯!我还没见过比这全面的!
- 纯c++实现光线追踪渲染器
- 好用的网页操作自动化软件
- 强化学习paper绘图技巧——改进smooth
- 17个练习自动化测试的网站,相信你一定喜欢
- java爬虫抓取极客时间专栏页面
- 阿里云服务器被入侵执行MoneroOcean(门罗币)挖矿脚本
- Verilog HDL 小练习(四)状态机
- python 做网站的工具_python能做网站
- 工程监测多通道振弦模拟信号采集仪VTN的四种工作模式
- C# excel转换Json
- Camera2 OpenCamera流程
热门文章
- try_files $uri $uri vue-router的history模式,nginx配置 try_files 含义
- Fourier变换、STFT变换、Gabor变换、小波变换、Haar变换、Hilbert变换
- html中图片鼠标滑动的效果,《前端每日实战》第177号作品:多张图片的鼠标悬停和滑动特效...
- html中网页禁止缩放,html如何禁止页面缩放
- 高精度非隔离高压电源控制型24v升200V/500V/800V/1200V升压变换器
- i.MX6ULL终结者Linux 电容触摸屏实验硬件原理图
- 微信小程序---全局分享实现
- ar开发 ue4_UE4 AR开发笔记
- C++代码实现中缀表达式求值(基于中缀表达式转后缀表达式)
- 超详细抖音老照片修复项目流程;普通人也能月入过万。丨国仁网络资讯