python实现自动导入excel数据到MySQL中
程序员文章站
2022-06-11 10:52:32
...
- 最近工作遇到了把excel数据自动导入到MySQL的需求,在考虑了kettle后,不太容易实现导入excel数据自动生成表的问题,于是乎,把解决方法转移到了python,结果python确有实现办法,喜出望外的解决了这个需求。
- 现在有一个文件夹,里面是我存放的一批需要导入数据库的excel文件。
- 首先我需要获取这个文件夹所有文件的路径,存放到list中,再通过循环的方式读取文件,一个一个的把excel表数据插入到数据库当中。当然在插入过程中,如果数据不规范,可以按照需求进行了数据的清洗处理,我的excel中第一行都是中文汉字的列名,于是乎,我把列按照col_1,col_2,col_3......的形式进行重命名。
- 插入数据库用到python包sqlalchemy的create_engine模块,实现自动生成表,插入数据到MySQL中。
- 废话不多说,下面附上代码。
# -*- coding: utf-8 -*- """ Created on Mon Apr 20 14:18:49 2020 @author: admin """ import os import pandas as pd #import cx_Oracle as cx from sqlalchemy import create_engine import pymysql file_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) #return file_name #调用函数 get_file(r'C:\Users\admin\Desktop\tech\table') for i in file_name: df=pd.DataFrame(pd.read_excel(i)) #转为字符串 df1=df.astype(str) b = df.columns.size #重命名列名 col_name = [] for j in range(b): a ='col_'+ str(j) col_name.append(a) #行数 m = df.shape[0] #列数 n = df.shape[1] Matrix = [[0 for x in range(n)] for y in range(m)] #去除单元格前后的空格 for k in range(m): for j in range(n): Matrix[k][j]=df1.iloc[k][j].strip() df2 = pd.DataFrame(Matrix,columns=col_name) df2.columns = col_name df2 = df2.applymap(lambda x: x if str(x) != 'nan' else '') #截取表名 table_name=i.split('\\')[-1].split('.')[0] #调用sqlalchemy包自动生成表插入数据 try: engine=create_engine('mysql+pymysql://root:[email protected]:3336/test?charset=utf8',encoding='utf8') df2.to_sql(table_name,con=engine,if_exists='replace',index=False) except UnicodeEncodeError: print(table_name+'报错了') continue
生成的表结构:如下所示:
CREATE TABLE pub_newhigh_02_jc ( XH bigint(20) NULL, ENTNAME text NULL, UNISCID text NULL, ZCDZ text NULL, QYFZR text NULL, FZRDH text NULL, RZID text NULL, RDND bigint(20) NULL, YYSRZE double NULL, XSSR double NULL, GXJSCPSR double NULL, JCKZE double NULL, YJKAJF double NULL, LRZE double NULL, JLR double NULL, SJSJSF double NULL, JNZZSE double NULL, JNSDSE double NULL, JMSZE double NULL, CYRYSL bigint(20) NULL, WJZJSL bigint(20) NULL, DNZLSQSL bigint(20) NULL, DNSQFMZLSL bigint(20) NULL, QMYYYYZLSL bigint(20) NULL, QMYYFMZLYXSL bigint(20) NULL, QMYYRJZZQ bigint(20) NULL, DNHDRJZZQ bigint(20) NULL, QMJCDLSJZYQ bigint(20) NULL, QZDNJCDLBTSJZYQ bigint(20) NULL, QMZWXPZSL bigint(20) NULL, QZDNZWXPZSL bigint(20) NULL, QMGJXYSL bigint(20) NULL, QZDNGJXYSL bigint(20) NULL, QMGJYJZYBHPZSL bigint(20) NULL, QZDNGJYJZYBHPZSL bigint(20) NULL, SSQY bigint(20) NULL, GXJSLX text NULL, YXQQ double NULL, YXQZ double NULL, BSC double NULL, SSDS double NULL, SFSCRD double NULL, JFSJRQ double NULL, ZJZ double NULL, RCTDSL double NULL, QMYYSYXXZLYXSL double NULL, DNSQSYXZLSL double NULL, QMYYWGZLYXSL double NULL, DNSQWGZLSL double NULL, QMGJJNZWPZSL double NULL, QZDNGJJNZWPZSL double NULL, QMYYQTZLYXSL double NULL, DNSQQTZLSL double NULL, YFTRBL double NULL, YFTRZZL double NULL, GNYFTRBL double NULL, LRZZL double NULL, ZSRZZL double NULL, ZCFZL double NULL )
推荐阅读
-
Python实现备份EC2的重要文件和MySQL数据库到S3
-
Excel中数据变动时不会自动重算如何实现index函数自动更新
-
java实现批量导入.csv文件到mysql数据库
-
Python导入txt数据到mysql的方法
-
ASP将Excel数据导入到SQLServer的实现代码
-
python实现zencart产品数据导入到magento(python导入数据)
-
把Excel上的数据表格导入到word中以方便计算
-
Excel表格数据导入数据库users表中,利用excel公式自动生成sql语句方法
-
用python简单实现mysql数据同步到ElasticSearch的教程
-
Java实现Excel导入数据库,数据库中的数据导入到Excel