Esporta da sqlite a csv utilizzando lo script di shell


88

Sto creando uno script di shell per esportare una query sqlite in un file csv, proprio come questo:

 #!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db ".headers on"
./bin/sqlite3 ./sys/xserve_sqlite.db ".mode csv"
./bin/sqlite3 ./sys/xserve_sqlite.db ".output out.csv"
./bin/sqlite3 ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;"
./bin/sqlite3 ./sys/xserve_sqlite.db ".exit"

Quando si esegue lo script, l'output viene visualizzato sullo schermo, invece di essere salvato in "out.csv". Funziona con lo stesso metodo con la riga di comando, ma non so perché lo script della shell non riesce a esportare i dati nel file.

Che cosa sto facendo di sbagliato?

Risposte:


125

sqlite3

Hai una chiamata separata sqlite3per ogni linea; quando selectscappi, il tuo .out out.csvè stato dimenticato.

Provare:

#!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db <<!
.headers on
.mode csv
.output out.csv
select * from eS1100_sensor_results;
!

anziché.

metodi sh / bash

Puoi chiamare il tuo script con un reindirizzamento:

$ your_script >out.csv

oppure puoi inserire quanto segue come prima riga nel tuo script:

exec >out.csv

Il primo metodo consente di specificare nomi di file diversi, mentre il secondo restituisce un nome di file specifico. In entrambi i casi la linea .output out.csvpuò essere ignorata.


Ottimo, grazie, ora funziona! (ed è necessario ">>" invece di ">", ma sono un novellino in Linux: D)
Rorro

1
Se una risposta qui in realtà risponde alla tua domanda, è necessario fare clic sul segno di spunta sotto totale dei voti la risposta (dovrebbe apparire grigio chiaro a voi). Questo contrassegna la domanda come risposta.
tzot

Scusate il ritardo, sono un vero novellino: D
Rorro

<<! ... !è esattamente ciò di cui avevo bisogno. Grazie.
Rostyslav Druzhchenko

172

Invece dei comandi punto, puoi usare le opzioni del comando sqlite3:

sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv

Questo lo rende un one-liner.

Inoltre, puoi eseguire un file di script sql:

sqlite3 -header -csv my_db.db < my_script.sql > out.csv

Utilizzare sqlite3 -helpper visualizzare l'elenco delle opzioni disponibili.


3
Molto, molto meglio ... questa dovrebbe essere la soluzione accettata! BACIO :-)
pvandenberk

5
Questa soluzione funzionerà anche su Windows, a condizione che sqlite3 si trovi sul tuo percorso o nella stessa directory.
amenthes

7

Recentemente ho creato uno script di shell che sarà in grado di prendere le tabelle da un file db e convertirle in file csv.

https://github.com/darrentu/convert-db-to-csv

Sentiti libero di farmi qualsiasi domanda sul mio script :)


3
Questo mi ha aiutato. Dovresti copiare e incollare le tue 10 righe di codice nella tua risposta, quindi il voto positivo che ho già dato sembrerebbe più giustificato.
mxmlnkn

Nello script mancano le virgolette intorno al nome della tabella (genera un errore se il nome della tabella ha trattini)
Eric F.

0

Sebbene la domanda riguardi lo script di shell, penso che aiuterà pochi di coloro che sono solo preoccupati di trasferire i dati dal database sqlite3 a un file csv.

Ho trovato un modo molto comodo per farlo con il browser Firefox utilizzando l'estensione SQLite Manager.

Connettiti semplicemente al tuo file di database sqlite in firefox (SQlite manager -> connect database) e poi Table -> Export table. Ti verranno offerte alcune altre opzioni che puoi semplicemente fare clic e provare ....

Alla fine ottieni un file csv con la tabella che hai scelto di esportare.


0
Using command line for Linux:

user@dell-Admin: sqlite3 #activate your sqlite database first
sqlite> .tables #search for tables if any available if already created one.
sqlite> .schema #if you want to check the schema of the table.

# once you find your table(s), then just do the following:

sqlite> .headers on   #export along with headers (column names)
sqlite> .mode csv     #file type is csv
sqlite> .output example.csv   #you want to provide file name to export
sqlite> SELECT * from events;    #If entire table is needed or select only required
sqlite> .quit    #finally quit the sqlite3

Ora cerca nel tuo sistema il file example.csv e lo otterrai.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.