当前位置:首页 > 数据库 > 正文

怎么把csv存入mysql数据库中

LOAD DATA INFILE语句,指定CSV文件路径、目标表名及字段/行分隔符等参数,将CS V文件导入MySQL数据库。

如何将CSV文件存入MySQL数据库

将CSV文件数据导入MySQL数据库是一个常见的数据迁移和处理任务,本文将详细介绍两种主要方法:使用MySQL自带的LOAD DATA INFILE命令和使用Python脚本进行导入。

使用MySQL的LOAD DATA INFILE命令

步骤1:准备CSV文件

确保CSV文件格式正确,第一行应为列名,数据行用逗号分隔。

怎么把csv存入mysql数据库中  第1张

id,name,age
1,张三,25
2,李四,30

步骤2:创建目标表

在MySQL中创建与CSV结构匹配的表:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

步骤3:使用LOAD DATA INFILE

执行以下SQL命令(需确保MySQL服务器有权限访问文件路径):

LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '
'
IGNORE 1 LINES;

参数说明

  • FIELDS TERMINATED BY ',':字段分隔符
  • ENCLOSED BY '"':字段包围符(如有)
  • IGNORE 1 LINES:跳过首行(表头)

注意事项

  1. 文件路径问题:LOAD DATA INFILE要求MySQL服务器能访问文件路径,通常需要将文件放在/var/lib/mysql-files/目录或使用绝对路径。
  2. 权限设置:确保MySQL用户有FILE权限:
    GRANT FILE ON . TO 'username'@'localhost';
  3. 安全替代方案:若无法直接访问文件,可先将文件导入客户端,再用LOAD DATA LOCAL INFILE(需启用local_infile功能)。

使用Python脚本导入

步骤1:安装必要库

pip install pymysql pandas

步骤2:编写Python脚本

import pandas as pd
from pymysql import connect
# 连接MySQL
db = connect(
    host="localhost",
    user="root",
    password="password",
    database="testdb",
    charset="utf8mb4"
)
# 读取CSV
df = pd.read_csv("file.csv")
# 插入数据(自动创建表)
df.to_sql(name="users", con=db, if_exists="replace", index=False)
db.close()

优势

  • 适合处理复杂数据清洗
  • 可动态处理数据类型转换
  • 跨平台操作,无需考虑文件路径权限

数据类型映射与常见问题

CSV数据类型 MySQL推荐类型 说明
整数 INT/BIGINT 根据数值范围选择
浮点数 DOUBLE/FLOAT 注意精度问题
字符串 VARCHAR 设置合理长度
日期 DATE/DATETIME 需符合格式

常见问题

  1. 字符集错误:若包含中文,需确保表字符集为utf8mb4,并在连接时指定charset="utf8mb4"
  2. 主键冲突:导入前检查CSV中的主键是否与现有数据冲突,可先用REPLACEINSERT IGNORE
  3. 数据截断:字段长度不足时会截断数据,需提前检查CSV数据长度。

完整操作示例

环境准备

  1. 创建数据库和用户:
    CREATE DATABASE testdb;
    CREATE USER 'csvuser'@'localhost' IDENTIFIED BY 'csvpass';
    GRANT ALL ON testdb. TO 'csvuser';
  2. 创建目标表(以员工数据为例):
    USE testdb;
    CREATE TABLE employees (
        emp_id INT PRIMARY KEY,
        name VARCHAR(100),
        department VARCHAR(50),
        salary DECIMAL(10,2)
    );

使用LOAD DATA INFILE导入

将CSV文件上传到服务器/var/lib/mysql-files/employees.csv,执行:

LOAD DATA INFILE '/var/lib/mysql-files/employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '
'
IGNORE 1 LINES;

验证导入结果

SELECT  FROM employees;

FAQs

Q1:使用LOAD DATA INFILE时出现”File not found”错误怎么办?
A1:确保文件路径正确且MySQL服务器有权限访问,可将文件移动到/var/lib/mysql-files/目录(Debian系),或使用绝对路径,若启用local_infile,可改用LOAD DATA LOCAL INFILE并在客户端执行。

Q2:如何处理包含特殊字符(如逗号、换行)的CSV数据?
A2:在LOAD DATA命令中设置ENCLOSED BY '"'包裹字段,并使用FIELDS ESCAPED BY '\'转义特殊字符。

LOAD DATA INFILE ...
ENCLOSED BY '"'
ESCAPED BY '\'
0