失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python_把csv文件导入数据库

Python_把csv文件导入数据库

时间:2020-08-10 04:48:07

相关推荐

Python_把csv文件导入数据库

涉及到两个包:sqlalchemy 与 pymysql

单用sqlalchemy包中的engine可以快速把当前目录下所有的csv文件导入数据库

import osimport pandas as pdfrom sqlalchemy import create_engine#连接数据库函数def engine(db_name):engine = create_engine('mysql+pymysql://root:lcx121@localhost/{}'.format(db_name), encoding='utf-8')return engine#创建csv文件def readFile_to_sql(db_name):try:#获取当前路径cwd = os.getcwd()#遍历当前路径,路径,文件全部爬去出来for dirpaths, dirnaames,filenames in os.walk(cwd): #dirpaths路径,dirnaames文件夹的名字,filenames所有文件的名字#判断csv文件是否存在for filename in filenames:if filename.endswith(".csv"):#读取文件df = pd.read_csv(filename,encoding="utf8",sep=',',dtype={'code':str})table_name = filename.split('.')[0]#直接写入数据库,'table_name'为表名,会自动创建一个表,不需要自己动手创建#to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3,在写入库的时候,pymysql(python3),mysqldb(python2)是不能用的,只能使用 sqlalchemy或者sqlliet3.df.to_sql(table_name,con=engine(db_name),if_exists='append',index=True)#第一个参数't_pandasRead'是需要导入的表名#第二个参数数据库引擎#第三个参数if_exists="",引号里面可以跟三个参数,fail(如果表存在,啥也不做),replace(如果表存在,删了表,再建立一个新表,把数据插入),append(如果表存在,把数据插入,如果表不存在创建一个表)#第四个参数是否需要配置索引except Exception as e:#输出报错问题raise e

eg:导入指定的数据库中:

readFile_to_sql('shida_date')

这样子导入数据会缺点,时间列会被变成字符串

避免这个问题,可以先建表,再导入,现在用pymysql包

import pymysql#连接数据库并执行mysql语句def get_to_sql(db_name, sql_list):#连接数据库db = pymysql.connect(host = 'localhost',user = 'root',password = 'lcx121',database = db_name)#创建游标cur = db.cursor()try:for sql in sql_list:cur.execute(sql)except Exception as e:db.rollback()raise e else:mit()print("update ok~")finally:cur.close()db.close()#创建表def get_table(table_name, idx):sql = "create table if not exists {}({})".format(table_name,idx)return sql

(上面try的部分写for语句,是为了以后在有多条sql语句需要运行时,可以并成一个列表,一次性运行)

例子:

#创建表的参数idx = 'id int(5) PRIMARY KEY AUTO_INCREMENT,date datetime,nums int(3) default 0'#创建表get_to_sql('shida_date',[get_table('days_test',idx)])

再用之前的sqlalchemy导入数据:

readFile_to_sql('shida_date')

如果觉得《Python_把csv文件导入数据库》对你有帮助,请点赞、收藏,并留下你的观点哦!

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