La herramienta de línea de comandos sqlite3

Última modificación: 6 de julio de 2020

En esta parte del tutorial de SQLite, cubrimos la herramienta de línea de comandos sqlite3.

La herramienta sqlite3

La herramienta sqlite3 es un frontend basado en el terminal de la biblioteca SQLite que puede evaluar las consultas de forma interactiva y mostrar los resultados en múltiples formatos.También se puede utilizar dentro de scripts.

En la pantalla del terminal, vemos el siguiente prompt de la herramienta sqlite3:

El comando .help es uno de los meta comandos de la herramienta sqlite3; en él se enumeran todos los meta comandos. El comando .exit y el comando .quitsexitan la sesión de sqlite3. También podemos utilizar la combinación de teclas Ctrl+D para salir de sqlite3. El comando .databases muestra las bases de datos adjuntas. El comando .tables lista las tablas disponibles.

El Ctrl+L borra la pantalla y el Ctrl+U borra la línea actual. (Cuando se construye con la librería readline.)

Crear base de datos con sqlite3

La base de datos SQLite completa se almacena en un único archivo de disco multiplataforma. Utilizamos la herramienta de línea de comandos sqlite3 para crear un nuevo archivo de base de datos.

$ sqlite3 test.db

Aquí creamos una nueva test.db base de datos. Si el archivo existe, se abre.

Meta comandos básicos de sqlite3

A continuación describimos algunos de los meta comandos de la herramienta sqlite3.

sqlite> .tablesAuthors Cars Friends ReservationsBooks Customers Orders 

El comando .tables muestra las tablas disponibles.

sqlite> SELECT * FROM Friends;1|Jane|F2|Thomas|M3|Franklin|M4|Elisabeth|F5|Mary|F6|Lucy|F7|Jack|M

Aquí tenemos la salida de una sentencia SELECT. Por defecto, el modo de salida es line y el separador es |.

sqlite> .separator :sqlite> SELECT * FROM Friends;1:Jane:F2:Thomas:M3:Franklin:M4:Elisabeth:F5:Mary:F6:Lucy:F7:Jack:M

Aquí hemos utilizado un nuevo separador de dos puntos.

Hay otros modos de salida disponibles. El siguiente ejemplo muestra el modo de salida column.

Este ejemplo muestra cómo se formatean los datos en el modo columna de sqlite. También se ha utilizado el comando .headers para mostrar las cabeceras de las columnas. Por defecto, las cabeceras están ocultas.

El comando .width ajusta el tamaño de las columnas.(Este meta comando es relevante sólo para las tablas en el modo columna.)

Los anchos de las columnas no son lo suficientemente amplios para mostrar todos los datos correctamente.

Aquí cambiamos los anchos de las columnas. La primera columna tendrá 15 caracteres de ancho y la segunda 18.

sqlite> .shell clear

El comando .shell ejecuta programas del sistema. En nuestro caso, limpiamos la pantalla con el comando clear. (El equivalente en Windows es cls.)

El comando .show enumera varios ajustes. Entre ellos, el modo de salida, el separador utilizado en el modo de lista y si las cabeceras están activadas.

sqlite> .schema CarsCREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name TEXT, Price INTEGER);

El comando .schema muestra la estructura de la tabla. Da el SQL DDL para crear la tabla.

Es posible cambiar el prompt del sqlite3 con el comando .prompt.

sqlite> .prompt "> " ". "> SELECT * FROM Cars. LIMIT 2;Id Name Price ---------- ---------- ----------1 Audi 52642 2 Mercedes 57127 > 

Hay dos prompts. Uno es el prompt principal y el otro es un prompt de continuación. El prompt principal por defecto es sqlite> y el prompt de continuación por defecto es ...>.

Ejecutar SQL desde el shell

Podemos ejecutar comandos SQL desde el shell.

Aquí hemos ejecutado de forma no interactiva una sentencia SELECT; se han seleccionado todos los coches de la tabla Cars.

Volcar tablas

Es posible volcar tablas en formato SQL al disco. De esta forma podemos guardar fácilmente la estructura y los datos de una tabla de la base de datos.

Tenemos la tabla Cars.

Vamos a utilizar el comando .dump para volcar la tabla.

El comando .dump nos muestra el SQL necesario para crear la tabla Cars.

sqlite> .output cars2.sqlsqlite> .dump Cars

También podemos redirigir la salida a un fichero. El comando .output redirigirá la salida al archivo cars2.sql.

Mostramos el contenido del archivo cars2.sql con el comando cat.

Lectura de SQL

Podemos leer sentencias SQL de un nombre de fichero con el comando .read.

Aquí hemos ejecutado una serie de comandos. Soltamos la tabla y la leemos desde cars.sql.

El fichero .sqlite_history

Los comandos y sentencias se archivan en el fichero .sqlite_history.El fichero se encuentra en el directorio home.

$ tail -5 ~/.sqlite_history .tablesSELECT * FROM Cars;.mode column.headers on.show

Usando el comando tail, mostramos las últimas cinco entradas.

Fichero de recursos

La herramienta sqlite3 tiene un fichero de recursos llamado .sqliterc. Se encuentra en el directorio de inicio. Si no existe tal archivo, podemos simplemente crearlo.El archivo de recursos puede contener meta comandos, o sentencias SQL regulares.Sin embargo, debemos evitar el uso de SQL en el archivo.

$ cat .sqliterc .mode column.headers on.nullvalue NULL 

Aquí hay un ejemplo simple de un archivo de recursos. Tiene tres meta comandos. Con un archivo de recursos, no tenemos que ejecutar los meta comandos de nuevo cuando iniciamos la herramienta sqlite3. Se ejecutarán automáticamente al inicio de la herramienta.

Tenemos un mensaje diciendo que la herramienta cargó recursos al inicio.

Opciones de línea de comandos

La herramienta tiene varias opciones de línea de comandos. En su mayoría duplican los meta comandos. Tenga en cuenta que las opciones de línea de comandos sobrescriben los meta comandos del archivo de recursos.

$ sqlite3 --help-- Loading resources from /home/janbodnar/.sqlitercUsage: sqlite3 FILENAME FILENAME is the name of an SQLite database. A new database is createdif the file does not previously exist.OPTIONS include: -ascii set output mode to 'ascii' -bail stop after hitting an error -batch force batch I/O -column set output mode to 'column' -cmd COMMAND run "COMMAND" before reading stdin -csv set output mode to 'csv' -echo print commands before execution -init FILENAME read/process named file -header turn headers on or off -help show this message -html set output mode to HTML -interactive force interactive I/O -line set output mode to 'line' -list set output mode to 'list' -lookaside SIZE N use N entries of SZ bytes for lookaside memory -mmap N default mmap size set to N -newline SEP set output row separator. Default: '\n' -nullvalue TEXT set text string for NULL values. Default '' -pagecache SIZE N use N slots of SZ bytes each for page cache memory -scratch SIZE N use N slots of SZ bytes each for scratch memory -separator SEP set output column separator. Default: '|' -stats print memory stats before each finalize -version show SQLite version -vfs NAME use NAME as the default VFS

La opción --help nos da la lista de todas las opciones disponibles con una breve descripción.

Iniciamos la herramienta sqlite3 con las opciones -echo-line, y -noheader. La declaración SELECT se repite/reclama después de ser lanzada. El ouput está en el modo de línea y no tenemos cabeceras mostradas.

Con la opción -version obtenemos la versión de sqlite3.

Con la opción -html, podemos dar salida a los resultados como simples tablas HTML.