1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python mysql 保存csv_使用Python将csv文件快速转存到Mysql

python mysql 保存csv_使用Python将csv文件快速转存到Mysql

时间:2023-08-04 08:16:29

相关推荐

python mysql 保存csv_使用Python将csv文件快速转存到Mysql

因为一些工作需要,我们经常会做一些数据持久化的事情,例如将临时数据存到文件里,又或者是存到数据库里。

对于一个规范的表文件(例如csv),我们如何才能快速将数据存到Mysql里面呢?

这个时候,我们可以使用python来快速编写脚本。

使用Python连接Mysql,我们就少不了使用pymysql这个模块。

使用pip进行快速安装:

pip install pymysql

安装结束,我们使用pymysql连接数据库:

import pymysql

con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.xxx.xxx", local_infile=1)`

user是连接数据库的用户名,passwd是连接数据的密码,db是你想要连接数据库的名字,host是你要连接数据库的主机,如果就是自己的电脑,就填127.0.0.1。我们这边是将csv批量写到数据库,需要设置local_infile参数,如果不添加会报错。

连接完数据库我们便可以使用游标来执行sql语句了:

cur = con.cursor()

定义好了游标我们就可以使用execute方法来执行sql语句了。

cur.execute("set names utf8")

cur.execute("SET character_set_connection=utf8;")

下面来打开csv文件,读取里面的内容,我们需要提取第一行列名的信息,然后创建表:

with open(file_path, 'r', encoding='utf8') as f:

reader = f.readline()

print(reader)

devide = reader.split(',') # 做成列表

devide[-1] = devide[-1].rstrip('\n') # 去除最后的换行符 print(devide)

默认读出来的数据就是一行字符串,现在我们通过“,”提取我们的列名,并且去除我们最后一个列名的换行符,这样我们就能得到所有的列名了。

下面我们需要创建表,在创建表之前我们需要将每个列指定一下格式:

column = ''

for dd in devide: column = column + dd + ' varchar(255),'

拼接好后我们需要将最后一个列的逗号去掉

col = column.rstrip(',')

这样我们就可以写创建表的sql语句了:

table_name = "TBexport"

create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'\ .format(table_name, col)

cur.execute(create_table_sql)

下面我们可以向表中插数据了:

首先要介绍一下,mysql支持csv数据的导入,以下是sql的语法:

最后一步,提交事务。(事务保证他们的连贯性,只要一步错就会进行回滚)

mit()

记得关闭游标和数据库连接。

cur.close() con.close()

完整代码:

import pymysql

# file_path = "exam.csv"

# table_name = 'update_time_table'

file_path = "export.csv"

table_name = "TBexport"

try:

con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.20x.xxx", local_infile=1) con.set_charset('utf8')

cur = con.cursor()

cur.execute("set names utf8")

cur.execute("SET character_set_connection=utf8;")

with open(file_path, 'r', encoding='utf8') as f:

reader = f.readline()

print(reader)

devide = reader.split(',') # 做成列表

devide[-1] = devide[-1].rstrip('\n') # 去除最后的换行符

print(devide)

column = '' for dd in devide: # 如果标题过长,只能存成text格式 if dd == "标题": column = column + dd + ' TEXT,' else: column = column + dd + ' varchar(255),'

col = column.rstrip(',') # 去除最后一个多余的,

# print(column[:-1])

create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'.format(table_name, col) print(create_table_sql)

data = 'LOAD DATA LOCAL INFILE \'' + file_path + '\'REPLACE INTO TABLE ' + table_name + ' CHARACTER SET UTF8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'

cur.execute(create_table_sql)

cur.execute(data.encode('utf8'))

print(cur.rowcount)

mit()

except:

print("发生错误")

con.rollback()

finally:

cur.close()

con.close()

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