RSS

Como migrar una Base de Datos de Access a SQLite

viernes, 18 de enero de 2008

A pedido de Guille en donde nos pedia si podíamos ver como migrar de una Base de Datos de Access a SQLite, buscando en internety bueno chequeando la información obtenida les paso a contar como es posible realizar esta acción.

En primer lugar necesitas tener instalado mdbtools, que son un par de herramientas para manipular Bases de Datos de Access. Esto es muy facil de instalar:

$ sudo apt-get install mdbtools

y obviamente descontamos que ya tienes instalado en tu maquina sqlite3.

Para este ejemplo les comento que encontre por ahy un ejemplo de base de dato de Access llamada Empresa.mdb

Ahora veamos como empezar a trabajar, primero vamos a pasar de mdb a sql y lo vamos a llevar a cabo en dos faces, primero por el esquema, donde aparece la definición de los datos y segundo por los datos que contiene nuestra base de datos. Para ello realizamos lo siguiente:

$ mdb-schema Empresa.mdb > esquema.sql

Ahora puedes visualizar el archivo "esquema.sql" y verás como esta la definición de las tablas, los campos, etc.

$ mdb-export -H -I Empresa.mdb Empleados > datos.txt

Lo que hicimos ahora fue migrar el contenido de la tabla "Empleados" al archivo "datos.txt", si se fijan este archivo cuenta con los correspondientes INSERT, VALUES, etc. Pero a todo esto tenemos un pequeño problema cada líne de INSERT no finaliza con un ";" como debería de ser en SQLite, pero esto nuevamente se soluciona muy facilmente:

$ cat datos.txt | sed -e 's/")/");/g' > datos.temp

Ahora bien es el archivo "datos.temp" quien ya fueron formateados los datos para la total migración a SQLite.
Por último nos queda finalizar la migración total a SQLite de la siguiente forma:

$ sqlite3 migracion.db
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .read esquema.sql
SQL error near line 9: no such table: Empleados
sqlite> .read datos.temp
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE Empleados
(
Clave Integer,
Puesto Text (20),
Nombre Text (50),
Email Text (50)
);
INSERT INTO "Empleados" VALUES(1,'Capo','Manuel Caro Quintero','mafia@sinaloa.com');
INSERT INTO "Empleados" VALUES(2,'Comandante','Ventura','PGR@sinaloa.com');
INSERT INTO "Empleados" VALUES(3,'Administrador','Lic. Palma','guero_palma@sinaloa.com');
COMMIT;


vemos como de manera exitosa migramos los datos desde una Base de Datos de Access a SQLite. Para finalizar veamos si realmente contamos con todos los datos y nuevamente revisamos.

sqlite> .tables
Empleados
sqlite> select * from Empleados;
1|Capo|Manuel Caro Quintero|mafia@sinaloa.com
2|Comandante|Ventura|PGR@sinaloa.com
3|Administrador|Lic. Palma|guero_palma@sinaloa.com
sqlite> .quit


Bueno ojalá que le sea útil y como siempre las dudas y preguntas la debatimos entre todos. Muchas Gracias y hasta la proxima...