跳到内容
🛠️ToolsShed

CSV 转 SQL INSERT 生成器

将CSV数据转换为SQL INSERT语句。可选生成带自动检测列类型的CREATE TABLE DDL。

关于此工具

CSV to SQL INSERT 生成器是一款基于浏览器的工具,可将电子表格数据转换为可执行的 SQL INSERT 语句。对于需要将 CSV 文件中的数据迁移到 SQL 数据库、快速填充测试数据库或将数据以可直接对任何 SQL 数据库系统执行的格式共享的开发人员和数据库管理员来说,此实用工具至关重要。

要使用此工具,只需粘贴或上传 CSV 数据,它会自动检测列标题和数据类型。然后,您可以生成针对现有表的普通 INSERT 语句,也可以包含推断的列定义的 CREATE TABLE 语句。此工具支持自定义选项,如指定表名、处理 NULL 值,以及选择不同的 SQL 方言或引号样式。

此工具可优雅地处理带引号字段中的逗号、单元格内的换行符和特殊字符等边界情况。它特别适用于一次性数据导入、为开发数据库注入种子数据,或准备数据集用于备份和恢复工作流,而无需命令行工具或数据库客户端软件。

常见问题

代码实现

import csv
import io

def csv_to_sql(csv_text, table_name="my_table", include_create=True):
    reader = csv.reader(io.StringIO(csv_text.strip()))
    rows = list(reader)
    if len(rows) < 2:
        return ""

    headers = rows[0]
    data_rows = rows[1:]

    def infer_type(values):
        for v in values:
            v = v.strip()
            if v == "":
                continue
            try:
                int(v)
                return "INT"
            except ValueError:
                try:
                    float(v)
                    return "FLOAT"
                except ValueError:
                    return "VARCHAR(255)"
        return "VARCHAR(255)"

    types = [infer_type([r[i] for r in data_rows if i < len(r)])
             for i in range(len(headers))]

    sql = []
    if include_create:
        cols = ", ".join(f"{h} {t}" for h, t in zip(headers, types))
        sql.append(f"CREATE TABLE {table_name} ({cols});")

    for row in data_rows:
        values = []
        for i, val in enumerate(row):
            if types[i] == "VARCHAR(255)":
                values.append(f"'{val.replace(chr(39), chr(39)*2)}'")
            else:
                values.append(val if val.strip() else "NULL")
        cols_str = ", ".join(headers)
        vals_str = ", ".join(values)
        sql.append(f"INSERT INTO {table_name} ({cols_str}) VALUES ({vals_str});")

    return "\n".join(sql)

csv_data = """id,name,score
1,Alice,95.5
2,Bob,87"""

print(csv_to_sql(csv_data))

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.