将CSV文件导入MySQL数据库是一个常见的数据迁移任务。以下是详细步骤和相关概念:
LOAD DATA INFILE
CREATE TABLE my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT,
email VARCHAR(255)
);
LOAD DATA INFILE
命令导入数据:LOAD DATA INFILE '/path/to/your/file.csv'
INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; -- 如果CSV文件有标题行,忽略第一行
如果你更喜欢编程方式,可以使用Python和pandas
库来处理CSV文件并导入MySQL。
pip install pandas mysql-connector-python
import pandas as pd
from mysql.connector import connect
# 读取CSV文件
df = pd.read_csv('path_to_your_file.csv')
# 连接到MySQL数据库
conn = connect(host='localhost', user='your_username', password='your_password', database='your_database')
cursor = conn.cursor()
# 将DataFrame数据插入到MySQL表中
for index, row in df.iterrows():
query = "INSERT INTO my_table (name, age, email) VALUES (%s, %s, %s)"
values = (row['name'], row['age'], row['email'])
cursor.execute(query, values)
# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()
原因: 可能是由于字符集不匹配导致的。 解决方法: 确保CSV文件和数据库使用相同的字符集,例如UTF-8。
SET NAMES utf8mb4;
原因: 可能是由于数据格式不一致或缺失值导致的。
解决方法: 使用LOAD DATA INFILE
的IGNORE
选项忽略错误行,或者在Python脚本中添加异常处理。
try:
cursor.execute(query, values)
except Exception as e:
print(f"Error inserting row {index}: {e}")
原因: 大量数据导入可能导致性能瓶颈。 解决方法: 使用批量插入或调整MySQL配置以提高导入速度。
# 批量插入示例
batch_size = 1000
for i in range(0, len(df), batch_size):
batch = df[i:i+batch_size]
data = [tuple(x) for x in batch.values]
cursor.executemany(query, data)
通过以上方法,你可以高效地将CSV文件导入MySQL数据库,并解决常见的导入问题。
领取专属 10元无门槛券
手把手带您无忧上云