Advertisement

python读取csv文件_如何通过Python将CSV文件导入MySQL数据库?

阅读量:

CSV文件导入数据库一般有两种方法:

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

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

样本CSV文件如下:
736c29aae25382443a1586c0f468642d.png

总体工作分为3步:

1、用python连接mysql数据库,可参考如何使用python连接数据库?

2、基于CSV文件表格字段创建表

3、使用load data方法导入CSV文件内容

load data语法简介:

复制代码
    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

全部评论 (0)

还没有任何评论哟~