Convertir un CSV, o una tabla en un Excel, es realmente sencillo y rápido de convertir en SQLite; y en consecuente en SQL. En el siguiente tutorial voy a enseñar como lograrlo usando las propias herramientas nativas de esta fantástica base de datos, sin software externo o de pago.
En el ejemplo voy a usar un CSV con 50 datos ficticios de empleados. Contiene id
, nombre
, apellidos
y salario
. La puedes descargar aquí.
Abrimos el terminal y creamos una base de datos vacía, con el nombre empleados
.
sqlite3 empleados.sqlite
Nos abrirá la Shell de SQLite donde podremos ejecutar código SQL o comandos de la base de datos.
Activamos el modo CSV.
.mode csv
Creamos una tabla que encaje con los 4 campos del CSV. Todos los campos deben ser de tipo TEXT
.
CREATE TABLE empleados (
id TEXT,
nombre TEXT,
apellidos TEXT,
salario TEXT
);
Importamos el archivo empleados.csv
dentro de la tabla empleados
.
.import empleados.csv empleados
Ahora ya podemos cambiar los tipos que necesitemos. Como el id
sea una PRIMARY KEY
y salario que sea de tipo INTEGER
.
No existe una implementación en SQLite que te permita cambiar los tipos de las columnas, por lo que debemos realizar algunos pasos intermedios.
-- Desactivamos las limitaciones de las claves foráneas
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
-- Renombramos la tabla a 'empleados_viejos'
ALTER TABLE empleados RENAME TO empleados_viejos;
-- Creamos la tabla definitiva
CREATE TABLE empleados
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL,
apellidos TEXT NOT NULL,
salario INTEGER NOT NULL
);
-- Insertamos todo el contenido de 'empleados_viejos' a 'empleados'
INSERT INTO empleados (id, nombre, apellidos, salario)
SELECT id, nombre, apellidos, salario
FROM empleados_viejos;
-- Borramos la anterior
DROP TABLE empleados_viejos;
-- Terminaos
COMMIT;
-- Habilitamos las claves foráneas
PRAGMA foreign_keys=on;
Puedes revisar que ha funcionado con cualquier sentencia SQL.
¿Todos los nombres y apellidos de los empleados?
SELECT nombre, apellidos FROM empleados;
¿Quíén es el empleado con el salario más alto?
SELECT nombre, apellidos, salario FROM empleados ORDER BY "salario" ASC LIMIT 1, 1;
Para salir.
.quit
Espero que os sea de ayuda.
{{ comments.length }} comentarios