如何经过Python将CSV文件导入MySQL数据库?

CSV文件导入数据库通常有两种方法:python

一、经过SQL的insert方法一条一条导入,适合数据量小的CSV文件,这里不作赘述。mysql

2、经过load data方法导入,速度快,适合大数据文件,也是本文的重点。sql


样本CSV文件以下:数据库

整体工做分为3步:微信

一、用python链接mysql数据库,可参考如何使用python链接数据库?app

二、基于CSV文件表格字段建立表函数

三、使用load data方法导入CSV文件内容大数据


load data语法简介:this

LOAD DATA LOCAL INFILE 'csv_file_path' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES

csv_file_path 指文件绝对路径编码

table_name 指表名称

FIELDS TERMINATED BY ',' 指以逗号分隔

LINES TERMINATED BY '\\r\\n' 指换行

IGNORE 1 LINES 指跳过第一行,由于第一行是表的字段名


下面给出所有代码:

下面给出所有代码:
#导入pymysql方法
import pymysql


#链接数据库
config = {'host':'',
'port':3306,
'user':'evdata',
'passwd':'',
'charset':'utf8mb4',
'local_infile':1
}
conn = pymysql.connect(**config)
cur = conn.cursor()


#load_csv函数,参数分别为csv文件路径,表名称,数据库名称
def load_csv(csv_file_path,table_name,database='evdata'):
#打开csv文件
file = open(csv_file_path, 'r',encoding='utf-8')
#读取csv文件第一行字段名,建立表
reader = file.readline()
b = reader.split(',')
colum = ''
for a in b:
colum = colum + a + ' varchar(255),'
colum = colum[:-1]
#编写sql,create_sql负责建立表,data_sql负责导入数据
create_sql = 'create table if not exists ' + table_name + ' ' + '(' + colum + ')' + ' DEFAULT CHARSET=utf8'
data_sql = "LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES" % (csv_filename,table_name)

#使用数据库
cur.execute('use %s' % database)
#设置编码格式
cur.execute('SET NAMES utf8;')
cur.execute('SET character_set_connection=utf8;')
#执行create_sql,建立表
cur.execute(create_sql)
#执行data_sql,导入数据
cur.execute(data_sql)
conn.commit()
#关闭链接
conn.close()
cur.close()


出现的问题:

我是用win10系统,代码执行时会出现如下错误

ERROR 1148 (42000): The used command is not allowed with this MySQL version.

缘由是不支持命令 load data

解决方法:

须要更改下配置文件

在mysql安装目录中找到my.ini配置文件,复制如下内容到文件中

[mysqld]        #服务端配置
local-infle = 1

[mysql] #客户端配置
local-infile = 1


本文分享自微信公众号 - Python大数据分析(pydatas)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索