如何用简单方法将CSV文件导入MySQL数据库?
MySQL 快速导入CSV文件的简单方法
图形化的Table Data Import Wizard会附加大量UI渲染、格式校验逻辑,大文件导入效率极低,推荐使用以下两种更简单高效的导入方案:
前置修正:建表语句
你之前编写的建表语句存在语法错误(缺少表结构外层括号、最后一列末尾多余逗号),修正后如下:
create table bikes ( ride_id varchar(10), rideable_type varchar(30), started_at date, ended_at date, start_station_name varchar(50), start_station_id varchar(10), end_station_name varchar(50) );
方法1:LOAD DATA 原生SQL导入(速度最快)
这是MySQL自带的批量导入能力,导入效率是图形化向导的10倍以上,操作如下:
- 提前确认CSV的字段顺序和表字段顺序一一对应,日期格式为
YYYY-MM-DD和表字段类型匹配 - 执行导入语句:
-- 开启本地文件读取权限(如果执行报错的话先运行这行) set global local_infile = 1; LOAD DATA LOCAL INFILE '替换为你的CSV文件绝对路径' INTO TABLE bikes FIELDS TERMINATED BY ',' -- CSV字段默认用逗号分隔 ENCLOSED BY '"' -- 字段内容如果用引号包裹就保留这行,没有可以删掉 LINES TERMINATED BY '\r\n' -- Windows系统用\r\n,Linux/macOS替换为\n IGNORE 1 LINES; -- CSV第一行是表头就跳过这行,没有表头就删掉这行
方法2:Python pandas 导入(和你熟悉的Python读CSV逻辑一致)
不需要记忆复杂的SQL参数,全程用Python语法操作,步骤如下:
- 先安装依赖包:
pip install pandas sqlalchemy pymysql - 执行导入代码:
import pandas as pd from sqlalchemy import create_engine # 建立MySQL连接,按你的实际配置替换用户名、密码、数据库名 engine = create_engine('mysql+pymysql://用户名:密码@127.0.0.1:3306/你的数据库名') # 读取CSV文件,和你平时用Python读CSV的操作完全一致 df = pd.read_csv('替换为你的CSV文件路径') # 直接导入MySQL,不需要提前手动建表,pandas会自动适配CSV内容创建表结构 df.to_sql( name='bikes', con=engine, if_exists='replace', # 可选参数:replace=覆盖已有表 append=在已有表后追加 fail=表存在就报错 index=False # 不导入pandas自动生成的索引列 )
注意事项
- 若CSV内容的字符串长度超过你建表时的varchar长度,建议先调整表字段长度再导入,避免内容被截断
- 若CSV里的日期格式不是
YYYY-MM-DD,可以在pandas读入后先转换格式再导入,或者在LOAD DATA语句中加格式转换逻辑
内容的提问来源于stack exchange,提问作者dgrszombie315
相关产品推荐
相关产品推荐

