Usar SQLite desde Shell Script

sqlitexample

En mi trabajo diario uso muchos shell scripts y generalmente en ellos hago uso de ficheros para guardar la informacion temporalmente, estos ficheros almacenan datos que seran leidos posteriormente desde otros shell scripts.
Esto aunque es funcional, presenta en ocasiones graves inconvenientes:
Tiempos de lectura/escritura en disco que son elevados e innecesarios o aun peor cuando esos ficheros se borran accidentalmente y no puede recuperarse la informacion desde los mismos.

Asi que me pregunte: ¿No existira una manera mas elegante de realizar estas mismas funciones?.

Y las posibilidades como siempre son muchas. Esta vez sin embargo me decante por SQLite.
SQLite es una base de datos muy ligera que guarda la informacion de las tablas internamente en ficheros y permite recuperar los datos de filas y columnas mediante consultas SQL.
Se emplea en productos como Firefox, para almacenar la cache del navegador e informacion de configuracion, o por ejemplo en Amarok, para indexar la informacion de los mp3 que tenemos en el disco duro.

Es una base de datos que no es recomendable usar en entornos de produccion, pues no es este su proposito, pero para pequeñas cosas como las que comento de guardar poca informacion temporalmente nos puede venir muy bien.

Instalarla es tan simple como:

$ sudo apt-get install sqlite3

Entonces ya podemos ejecutar:

$ sqlite

Para acceder a su prompt de control.

Nota: en los ejemplo uso “sqlite” en lugar de “sqlite3″, ello es por la version de SQLite instalada (si instalas una version inferior a la version 3, p.ej usaste apt-get install sqlite en lugar de apt-get install sqlite3“)  el comando es “sqlite” para referenciar a la base de datos, en vez de “sqlite3″.

Si la queremos usar desde la linea de comandos, recomiendo leer la documentacion de su sitio web.
Podriamos p.ejemplo crear una tabla y meter informacion en sus registros.

root@soledad:~# sqlite temp
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> CREATE TABLE CACHE(ID varchar(100),NAME varchar(100),VALUE varchar(100));
sqlite> insert into CACHE values('Test01','NUMERO','1111199993');
sqlite> select * FROM CACHE;
Test01|NUMERO|1111199993
sqlite> insert into CACHE values('Test01','PROVISION','00000');
sqlite> select * FROM CACHE
...> ;
Test01|NUMERO|1111199993
Test01|PROVISION|00000
sqlite> select * FROM CACHE where NAME='PROVISION';
Test01|PROVISION|00000
sqlite> select VALUE FROM CACHE where NAME='PROVISION';
00000
sqlite> .quit
root@soledad:~# sqlite temp "SELECT VALUE FROM CACHE where NAME='PROVISION'";
00000
root@soledad:~# sqlite temp "INSERT INTO CACHE VALUES('Test02','NUMERO','11113333');"
root@soledad:~# sqlite temp "SELECT VALUE FROM CACHE";
1111199993
00000
11113333

Pero a mi me interesa usarla desde shell script. ¿Como puedo usarla?. pues muy simple. Los comandos serian:

VARIABLE=`sqlite base_de_datos "sentencia_SQL_a_ejecutar"`

Ejemplos:

sqlite temp "INSERT INTO TABLA VALUES('1','2')";

Inserta un registro en una tabla llamada TABLA de la base de datos (fichero) llamado “temp”

MI_DATA=`sqlite temp "select c from t where condicion='1'"`
echo "Recuperado $MI_DATA"

Ejecuta “select c from t where condicion=’1′” en una base de datos llamada “temp”

Estos ejemplos SQL son muy tontos y no funcionales, unicamente los pongo como ejemplo de como es la sintaxis.

Genial,verdad!!! se acabo el uso de ficheros en shell si no es extrictamente necesario.

De todas formas en la imagen adjunta al comienzo del post teneis un ejemplillo de libreria en bash para poder usar desde shell script.
Podeis utilizarla o crear la vuestra propia para por ejemplo almacenar notas, o configuraciones de maquinas, etc… las posibilidades son infinitas.

Y para diseñar el modelo de datos si no tienes ninguna tool a mano, puedes usar de manera online: wwwsqldesigner cuyo codigo podeis descargar desde Google code.

Para acabar, las bases de datos se crean ejecutando “sqlite nombre_de_la_base_de_datos” a secas:

$ sqlite3 mydb

Crearia una base de datos llamada “mydb” que realmente es un fichero del sistema de archivos.
entonces se abre el promt de la base de datos, y ya podemos crear la tablas, etc…
..
sqlite3> CREATE TABLE…

Mas informacion:

http://www.sqlite.org/cvstrac/wiki?p=ShellScript

http://snippets.dzone.com/posts/show/3080

http://mailliststock.wordpress.com/2007/03/01/sqlite-examples-with-bash-perl-and-python/

http://www.sqlite.org/index.html

4 Respuestas a “Usar SQLite desde Shell Script”


  1. 1 shakaran Enero 29, 2009 a las 2:29 pm

    Muy útil

    Yo he utilizado un script en python para migrar tablas de Microsoft Access a sqlite y la verdad es que se nota muy buen rendimiento.

    Saludos.

  2. 2 juancarlospaco Enero 29, 2009 a las 4:28 pm

    @shakaran: Compartilo…

  3. 3 shakaran Enero 29, 2009 a las 5:04 pm

    @juancarlospaco: estoy en ello, tengo varios borradores sin publicar en mi blog (los exámenes no me dejan mucho tiempo).

    Espero que este fin de semana pueda terminar alguno y publicarlo. Son unas 300 lineas de código y me gusta explicar bien las cosas para que no queden dudas ;)

    Saludos

  4. 4 [DoodoM] Enero 29, 2009 a las 11:26 pm

    La verdad es que no hace ni 1 semana que he descubierto el SQLite debido a que tuve que arreglar una tabla del paclaces.sqlite del Firefox 3, y la verdad es que es un juguetito que me encanta, y creo que tiene aplicaciones muy útiles. Yoo principalmente trabajo con MySQL, pero me encanta lo sencillo, minimalista e independiente que lo hace todo SQLite.

    Por cierto, gracias por compartir el pantallazo del shell script.


Escribe un comentario




Mi Google Calendar de Estrenos de Cine

Ubuntu: For Desktops, Servers, Netbooks and in the cloud

TRABAJANDO EN EL NUEVO UBUNTU LIFE
Problemas en el servidor, me han obligado a abandonar temporalmente www.ubuntulife.net y ahora escribo solo en ubuntulife.wordpress.com, estoy trabajando en el nuevo sitio y espero añadir novedades. Sugerencias son bienvenidas. ( Lee mas )

WALLPAPERS LIFE ( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map

 

Enero 2009
L M X J V S D
« Dic   Feb »
 1234
567891011
12131415161718
19202122232425
262728293031  

Blog Stats

  • 8,377,352 hits