失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python实现自动导入excel数据到MySQL中

python实现自动导入excel数据到MySQL中

时间:2023-10-04 09:36:15

相关推荐

python实现自动导入excel数据到MySQL中

最近工作遇到了把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 @author: admin"""import osimport pandas as pd#import cx_Oracle as cxfrom sqlalchemy import create_engineimport pymysqlfile_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_namedf2 = 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:123@192.168.3.274: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,YYSRZEdouble NULL,XSSR double NULL,GXJSCPSR double NULL,JCKZE double NULL,YJKAJFdouble NULL,LRZE double NULL,JLR double NULL,SJSJSFdouble NULL,JNZZSEdouble NULL,JNSDSEdouble NULL,JMSZE double NULL,CYRYSLbigint(20) NULL,WJZJSLbigint(20) NULL,DNZLSQSL bigint(20) NULL,DNSQFMZLSLbigint(20) NULL,QMYYYYZLSLbigint(20) NULL,QMYYFMZLYXSL bigint(20) NULL,QMYYRJZZQ bigint(20) NULL,DNHDRJZZQ bigint(20) NULL,QMJCDLSJZYQbigint(20) NULL,QZDNJCDLBTSJZYQ bigint(20) NULL,QMZWXPZSL bigint(20) NULL,QZDNZWXPZSLbigint(20) NULL,QMGJXYSL bigint(20) NULL,QZDNGJXYSLbigint(20) NULL,QMGJYJZYBHPZSL bigint(20) NULL,QZDNGJYJZYBHPZSLbigint(20) NULL,SSQY bigint(20) NULL,GXJSLXtext NULL,YXQQ double NULL,YXQZ double NULL,BSC double NULL,SSDS double NULL,SFSCRDdouble NULL,JFSJRQdouble NULL,ZJZ double NULL,RCTDSLdouble NULL,QMYYSYXXZLYXSL double NULL,DNSQSYXZLSLdouble NULL,QMYYWGZLYXSL double NULL,DNSQWGZLSLdouble NULL,QMGJJNZWPZSL double NULL,QZDNGJJNZWPZSL double NULL,QMYYQTZLYXSL double NULL,DNSQQTZLSLdouble NULL,YFTRBLdouble NULL,YFTRZZL double NULL,GNYFTRBL double NULL,LRZZL double NULL,ZSRZZLdouble NULL,ZCFZL double NULL )

如果觉得《python实现自动导入excel数据到MySQL中》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。