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

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

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

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

样本CSV文件如下:


总体工作分为3步:

  1. 用python连接mysql数据库
  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 指跳过第一行,因为第一行是表的字段名

全部代码:

import pymysql

# 连接数据库
config = {'host':'你的sql地址',
          'port':端口这里整型的,
          'user':'sql用户名',
          'passwd':'sql密码',
          '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()
    # 关闭文件
    file.close()
# 最后关闭连接
cur.close()
conn.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

结语: 感谢 知乎大神的分享

你可能感兴趣的:(如何将CSV文件导入MySQL数据库?)