Exportar de sqlite a csv usando un script de shell

88

Estoy haciendo un script de shell para exportar una consulta sqlite a un archivo csv, así:

 #!/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"

Al ejecutar el script, la salida aparece en la pantalla, en lugar de guardarse en "out.csv". Está funcionando haciendo el mismo método con la línea de comando, pero no sé por qué el script de shell no puede exportar datos al archivo.

¿Qué estoy haciendo mal?

Rorro
fuente

Respuestas:

125

sqlite3

Tiene una llamada separada sqlite3para cada línea; para el momento en que selectcorres, tu ya .out out.csvha sido olvidado.

Tratar:

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

en lugar.

métodos sh / bash

Puede llamar a su script con una redirección:

$ your_script >out.csv

o puede insertar lo siguiente como primera línea en su secuencia de comandos:

exec >out.csv

El primer método le permite especificar diferentes nombres de archivo, mientras que el segundo da como resultado un nombre de archivo específico. En ambos casos, la línea .output out.csvse puede ignorar.

tzot
fuente
Genial, gracias, ¡ahora está funcionando! (y se necesita ">>" en lugar de ">", pero soy un novato en linux: D)
Rorro
1
Si una respuesta aquí realmente responde a su pregunta, debe hacer clic en la marca de verificación debajo del total de votos de la respuesta (debería aparecer en gris claro). Esto marca la pregunta como respondida.
tzot
Perdón por el retraso, soy un verdadero novato: D
Rorro
<<! ... !es exactamente lo que necesitaba. Gracias.
Rostyslav Druzhchenko
172

En lugar de los comandos de punto, puede usar las opciones de comando sqlite3:

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

Esto lo convierte en una sola línea.

Además, puede ejecutar un archivo de script SQL:

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

Use sqlite3 -helppara ver la lista de opciones disponibles.

Hollister
fuente
3
Mucho, mucho mejor ... ¡esta debería ser la solución aceptada! KISS :-)
pvandenberk
5
Esta solución también funcionará en Windows, siempre que sqlite3 esté en su ruta o en el mismo directorio.
actualización el
7

Recientemente creé un script de shell que podrá tomar las tablas de un archivo db y convertirlas en archivos csv.

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

No dudes en hacerme cualquier pregunta sobre mi guión :)

Darren NECESITA AYUDA
fuente
3
Eso me ayudó. Debe copiar y pegar sus 10 líneas de código en su respuesta, entonces el voto a favor que ya he dado se sentiría más justificado.
mxmlnkn
Al script le faltan comillas alrededor del nombre de la tabla (arroja un error si el nombre de la tabla tiene guiones)
Eric F.
0

Aunque la pregunta es sobre el script de shell, creo que ayudará a algunos de los que simplemente se preocupan por transferir los datos de la base de datos sqlite3 a un archivo csv.

Encontré una forma muy conveniente de hacerlo con el navegador Firefox usando la extensión SQLite Manager.

Simplemente conéctese a su archivo de base de datos sqlite en firefox (administrador SQlite -> conectar base de datos) y luego Tabla -> Exportar tabla. Se le servirán algunas opciones más en las que puede hacer clic y probar ...

Al final, obtiene un archivo csv con la tabla que ha elegido exportar.

infoclogged
fuente
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

Ahora busque en su sistema el archivo example.csv y lo obtendrá.

Jainmiah
fuente