什么是 CSV 转 SQL
CSV 转 SQL 是将 CSV(逗号分隔值)格式的表格数据转换为 SQL INSERT 语句的过程,用于将数据批量导入数据库。
转换示例
CSV 输入:
id,name,email,age
1,张三,zhang@example.com,28
2,李四,li@example.com,32
SQL 输出:
INSERT INTO users (id, name, email, age) VALUES
(1, '张三', 'zhang@example.com', 28),
(2, '李四', 'li@example.com', 32);
为什么需要 CSV 转 SQL
- 数据迁移:从 Excel/CSV 批量导入数据到数据库
- 测试数据:快速创建大量测试数据
- 数据备份:将数据库导出为 CSV 后重新导入
- 系统集成:将第三方系统的 CSV 数据导入自有数据库
- 报表数据:将报表 CSV 数据写入分析数据库
- 初始化数据:为新数据库导入初始数据
转换注意事项
数据类型映射
| CSV 值 | SQL 类型 | 注意事项 | |--------|---------|---------| | 纯数字 | INT / BIGINT | 检查数值范围 | | 小数 | DECIMAL / FLOAT | 注意精度 | | 日期 | DATE / DATETIME | 注意日期格式 | | 布尔值 | BOOLEAN | true/false vs 1/0 | | 空值 | NULL | 区分空字符串和 NULL | | 文本 | VARCHAR / TEXT | 注意长度限制 |
SQL 注入防护
⚠️ 重要:CSV 数据中的特殊字符(如单引号 ')需要转义!
-- 错误:O'Brien 会导致 SQL 错误
INSERT INTO users (name) VALUES ('O'Brien');
-- 正确:转义单引号
INSERT INTO users (name) VALUES ('O''Brien');
如何使用在线工具
使用 DevToolkit Pro 的 CSV 转 SQL 工具:
- 粘贴 CSV 数据
- 设置表名和列名
- 选择数据库类型(MySQL、PostgreSQL、SQLite)
- 自动生成 INSERT 语句
- 支持批量插入优化
代码中的 CSV 转 SQL
JavaScript
function csvToSQL(csv, tableName) {
const lines = csv.trim().split('\n');
const headers = lines[0].split(',').map(h => h.trim());
const values = lines.slice(1).map(line => {
return '(' + line.split(',').map(val => {
val = val.trim();
if (val === '' || val === 'NULL') return 'NULL';
if (!isNaN(val)) return val;
return "'" + val.replace(/'/g, "''") + "'";
}).join(', ') + ')';
}).join(',\n');
return `INSERT INTO ${tableName} (${headers.join(', ')}) VALUES\n${values};`;
}
Python
import csv
import io
def csv_to_sql(csv_text, table_name):
reader = csv.reader(io.StringIO(csv_text))
headers = next(reader)
columns = ', '.join(headers)
rows = []
for row in reader:
values = []
for val in row:
if val == '' or val.upper() == 'NULL':
values.append('NULL')
elif val.replace('.','',1).replace('-','',1).isdigit():
values.append(val)
else:
values.append("'" + val.replace("'", "''") + "'")
rows.append('(' + ', '.join(values) + ')')
return f"INSERT INTO {table_name} ({columns}) VALUES\n" + ',\n'.join(rows) + ';'
批量导入优化
-- MySQL: 使用 LOAD DATA 导入(最快方式)
LOAD DATA INFILE '/path/to/data.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
-- PostgreSQL: 使用 COPY 命令
COPY users (id, name, email, age)
FROM '/path/to/data.csv'
DELIMITER ','
CSV HEADER;
FAQ
CSV 中有换行怎么办?
如果字段内包含换行,需要用双引号包裹该字段。在线工具通常能自动处理这种情况。手动处理时,确保字段被双引号包裹。
导入大量数据很慢怎么办?
- 使用批量 INSERT 代替单条 INSERT
- 使用数据库原生导入命令(LOAD DATA / COPY)
- 暂时禁用索引和约束,导入后重建
- 分批导入(每批 1000-5000 条)
- 使用事务包裹导入操作
CSV 和 SQL 的编码不一致怎么办?
确保 CSV 文件使用 UTF-8 编码。数据库连接也要设置 UTF-8 编码。在 MySQL 中使用 SET NAMES utf8mb4。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。
相关文章
YAML JSON 转换完全指南:原理、工具与最佳实践
深入理解 YAML 和 JSON 的区别与联系,掌握 YAML JSON 双向转换的各种方法——在线工具、命令行、代码实现,以及常见陷阱和最佳实践。
在线 XML/JSON 转换器:数据格式互转工具
学习如何在 XML 和 JSON 格式之间转换数据。了解 XML 和 JSON 的特点差异,以及在 API 集成、配置管理和数据交换中的应用场景。
在线 Markdown 预览器:实时渲染和编辑 Markdown 文档
学习如何使用在线 Markdown 预览器实时渲染 Markdown 文档。了解 Markdown 语法、GFM 扩展、表格和代码高亮,以及在技术文档中的最佳实践。