Lo strumento a riga di comando sqlite3

ultima modifica 6 luglio 2020

In questa parte del tutorial SQLite, trattiamo lo strumento a riga di comando sqlite3.

Lo strumento sqlite3

Lo strumento sqlite3 è un frontend basato su terminale per la libreria SQLite che può valutare le query in modo interattivo e visualizzare i risultati in diversi formati.Può anche essere usato all’interno di script.

Sullo schermo del terminale, vediamo il seguente prompt dello strumento sqlite3:

Il comando .help è uno dei meta comandi dello strumento sqlite3; elenca tutti i meta comandi. Il comando .exit e il comando .quit permettono di uscire dalla sessione sqlite3. Possiamo anche usare la combinazione di tasti Ctrl+D per uscire da sqlite3. Il comando .databases mostra i database collegati. Il comando .tables elenca le tabelle disponibili.

Ctrl+L cancella lo schermo e Ctrl+U cancella la linea corrente. (Se costruito con la libreria readline.)

Crea il database con sqlite3

Il database SQLite completo è memorizzato in un singolo file su disco multipiattaforma. Usiamo lo strumento da linea di comando sqlite3 per creare un nuovo file di database.

$ sqlite3 test.db

Qui creiamo un nuovo test.db database. Se il file esiste, viene aperto.

Metacomandi di base di sqlite3

In seguito descriviamo alcuni dei metacomandi dello strumento sqlite3.

sqlite> .tablesAuthors Cars Friends ReservationsBooks Customers Orders 

Il comando .tables mostra le tabelle disponibili.

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

Qui si ottiene l’output di una dichiarazione SELECT. Per default, la modalità di output è line e il separatore è |.

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

Qui abbiamo usato un nuovo separatore di due punti.

Ci sono diverse altre modalità di output disponibili. L’esempio seguente mostra la modalità di output column.

Questo esempio mostra come vengono formattati i dati nella modalità colonna di sqlite. Il comando .headers è stato utilizzato anche per mostrare le intestazioni di colonna. Per impostazione predefinita, le intestazioni sono nascoste.

Il comando .width regola la dimensione delle colonne (questo meta comando è rilevante solo per le tabelle in modalità colonna). La prima colonna sarà larga 15 caratteri e la seconda 18.

sqlite> .shell clear

Il comando .shell esegue programmi di sistema. Nel nostro caso, puliamo lo schermo con il comando clear. (L’equivalente su Windows è cls.)

Il comando .show elenca varie impostazioni. Queste includono la modalità di output, il separatore usato nella modalità lista e se le intestazioni sono attive.

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

Il comando .schema mostra la struttura della tabella. Fornisce il DDL SQL per creare la tabella.

È possibile cambiare il prompt del sqlite3 con il comando .prompt.

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

Ci sono due prompt. Uno è il prompt principale e l’altro è un prompt di continuazione. Il prompt principale di default è sqlite> e il prompt di continuazione di default è ...>.

Esecuzione di SQL dalla shell

Possiamo eseguire comandi SQL dalla shell.

Qui abbiamo eseguito in modo non interattivo un comando SELECT; tutte le auto della tabella Cars sono state selezionate.

Dumping delle tabelle

È possibile fare il dump delle tabelle in formato SQL sul disco. In questo modo possiamo facilmente salvare la struttura e i dati di una tabella del database.

Abbiamo la tabella Cars.

Utilizzeremo il comando .dump per scaricare la tabella.

Il comando .dump ci mostra l’SQL necessario per creare la Cars tabella.

sqlite> .output cars2.sqlsqlite> .dump Cars

Possiamo anche reindirizzare l’output su un file. Il comando .output reindirizzerà l’output al file cars2.sql.

Mostriamo il contenuto del file cars2.sql con il comando cat.

Lettura di SQL

Possiamo leggere le istruzioni SQL da un nome di file con il comando .read.

Qui abbiamo eseguito una serie di comandi. Eliminiamo la tabella e la leggiamo da cars.sql.

Il file .sqlite_history

I comandi e le istruzioni sono archiviati nel file .sqlite_history.

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

Utilizzando il comando tail, mostriamo le ultime cinque voci.

File risorsa

Lo strumento sqlite3 ha un file risorsa chiamato .sqliterc. Si trova nella directory home. Se non c’è un tale file, possiamo semplicemente crearlo. Il file di risorse può contenere meta comandi o normali istruzioni SQL, ma dovremmo evitare di usare l’SQL nel file.

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

Ecco un semplice esempio di file di risorse. Ha tre meta comandi. Con un file di risorse, non dobbiamo eseguire di nuovo i meta comandi quando avviamo lo strumento sqlite3. Verranno eseguiti automaticamente all’inizio dello strumento.

Abbiamo un messaggio che dice che lo strumento ha caricato le risorse all’inizio.

Opzioni della linea di comando

Lo strumento ha diverse opzioni della linea di comando. Per lo più duplicano i meta-comandi. Si noti che le opzioni della linea di comando sovrascrivono i meta comandi del file delle risorse.

$ 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

L’opzione --help ci dà la lista di tutte le opzioni disponibili con una breve descrizione.

Iniziamo lo strumento sqlite3 con le opzioni -echo-line, e -noheader. L’istruzione SELECT viene ripetuta/eseguita dopo essere stata lanciata. L’ouput è in modalità linea e non abbiamo nessuna intestazione visualizzata.

Con l’opzione -version otteniamo la versione di sqlite3.

Con l’opzione -html, possiamo mostrare i risultati come semplici tabelle HTML.