最近在研究利用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数据库对应表相关推荐

  1. 将excel数据批量插入到数据库表中

    项目实例结构: 1.model实体类 package com.model;public class Test {private int num1;private String num2;private ...

  2. POI和EasyExcel实现Excel数据批量读取到数据库

    POI和easyExcel讲解 目的:这一部分我主要是为了实现excel数据批量插入到数据库. 参考:狂神说java的上课笔记 视屏教学网址 常用信息 1,将用户信息导出为excel表格 2,讲Exc ...

  3. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...

  4. php导入excel先检查,php 如何在导入Excel数据时检查Mysql数据库内容是否存在,避免重复录入?:怎么样筛选excel表格重复的数据库...

    php 如何在导入Excel数据时检查Mysql数据库内容是否存在,避免重复录入? 如果不想每询一次以提前做一个统询 $sql=mysql_query("select distinct Co ...

  5. java 农历的编写保存数据批量插入到数据库中

    java 农历的编写保存数据批量插入到数据库中 1.阴历转农历的工具类 public class Nongli {private static int monCyl, dayCyl, yearCyl; ...

  6. vue excel导入mysql详细教程_Vue前端上传EXCEL文件,后端(springBoot+MyBatis+MySQL)解析EXCEL并批量插入/更新数据库...

    文章目录 Vue前端 后端 controller层 service层:如何解析Excel文件 MyBatis:实现批量插入 在mysql中设置唯一索引Unique Index MySQL中的inser ...

  7. 1亿条数据批量插入 MySQL,哪种方式最快

    利用JAVA向Mysql插入一亿数量级数据-效率测评 这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数 ...

  8. 1亿条数据批量插入 MySQL,哪种方式最快?

    这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论. 所以通过随 ...

  9. 面试官:1亿条数据批量插入 MySQL,哪种方式最快?

    这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论. 所以通过随 ...

最新文章

  1. python下载代码-Python3----下载小说代码
  2. 【联邦学习】FATE 集群部署 step3
  3. 如何准备电赛?19年电赛经验总结!
  4. 和为s的两个数字 - 双指针
  5. Http请求返回最外层的模型
  6. apache和php结合、apache的默认虚拟主机
  7. Setup Factory 点击uninstall.exe Invalid start mode : archive filename
  8. CPU内存乱序访问与内存屏障
  9. 诺,你们要的Python进阶来咯!我还没见过比这全面的!
  10. 纯c++实现光线追踪渲染器
  11. 好用的网页操作自动化软件
  12. 强化学习paper绘图技巧——改进smooth
  13. 17个练习自动化测试的网站,相信你一定喜欢
  14. java爬虫抓取极客时间专栏页面
  15. 阿里云服务器被入侵执行MoneroOcean(门罗币)挖矿脚本
  16. Verilog HDL 小练习(四)状态机
  17. python 做网站的工具_python能做网站
  18. 工程监测多通道振弦模拟信号采集仪VTN的四种工作模式
  19. C# excel转换Json
  20. Camera2 OpenCamera流程

热门文章

  1. try_files $uri $uri vue-router的history模式,nginx配置 try_files 含义
  2. Fourier变换、STFT变换、Gabor变换、小波变换、Haar变换、Hilbert变换
  3. html中图片鼠标滑动的效果,《前端每日实战》第177号作品:多张图片的鼠标悬停和滑动特效...
  4. html中网页禁止缩放,html如何禁止页面缩放
  5. 高精度非隔离高压电源控制型24v升200V/500V/800V/1200V升压变换器
  6. i.MX6ULL终结者Linux 电容触摸屏实验硬件原理图
  7. 微信小程序---全局分享实现
  8. ar开发 ue4_UE4 AR开发笔记
  9. C++代码实现中缀表达式求值(基于中缀表达式转后缀表达式)
  10. 超详细抖音老照片修复项目流程;普通人也能月入过万。丨国仁网络资讯