Saltar al contenido
🛠️ToolsShed

Generador CSV a SQL INSERT

Convierte datos CSV en sentencias SQL INSERT. Opcionalmente genera CREATE TABLE DDL con tipos de columna detectados automáticamente.

Acerca de esta herramienta

El Generador de INSERT SQL desde CSV es una herramienta basada en navegador que convierte datos de hojas de cálculo en sentencias SQL INSERT ejecutables. Esta utilidad es esencial para desarrolladores y administradores de bases de datos que necesiten migrar datos desde archivos CSV a bases de datos SQL, llenar rápidamente bases de datos de prueba o compartir datos en un formato que pueda ejecutarse directamente contra cualquier sistema de base de datos SQL.

Para utilizar esta herramienta, pegue o cargue sus datos CSV y se detectarán automáticamente los encabezados de columna y tipos de datos. Luego puede generar sentencias INSERT simples para tablas existentes o incluir una sentencia CREATE TABLE con definiciones de columna inferidas. La herramienta admite opciones de personalización como especificar el nombre de la tabla, manejar valores NULL y elegir entre diferentes dialectos SQL o estilos de entrecomillado.

Esta herramienta maneja con elegancia casos límite como campos entrecomillados con comas, saltos de línea dentro de celdas y caracteres especiales. Es particularmente útil para importaciones de datos únicas, poblamiento de bases de datos de desarrollo o preparación de conjuntos de datos para flujos de trabajo de copia de seguridad y restauración sin requerir herramientas de línea de comandos ni software cliente de base de datos.

Preguntas Frecuentes

Implementación de Código

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.