91 votes

Exportation de sqlite vers csv en utilisant le shell script.

Je fais un shell script pour exporter une requête sqlite vers un fichier csv, comme ceci :

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

Lors de l'exécution du script, la sortie s'affiche à l'écran, au lieu d'être enregistrée dans "out.csv". Cela fonctionne en utilisant la même méthode avec la ligne de commande, mais je ne sais pas pourquoi le script de l'interpréteur de commandes ne parvient pas à exporter les données vers le fichier.

Qu'est-ce que je fais de mal ?

183voto

Hollister Points 902

Au lieu des commandes dot, vous pouvez utiliser les options de la commande sqlite3 :

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

Cela en fait une phrase unique.

Vous pouvez également exécuter un fichier sql script :

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

Utilice sqlite3 -help pour voir la liste des options disponibles.

4 votes

Beaucoup, beaucoup mieux... cela devrait être la solution acceptée ! KISS :-)

6 votes

Cette solution fonctionnera également sous Windows, à condition que sqlite3 soit sur votre chemin ou dans le même répertoire.

126voto

tzot Points 32224

sqlite3

Vous avez un appel séparé à sqlite3 pour chaque ligne ; au moment où votre select fonctionne, votre .out out.csv a été oublié.

Essayez :

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

à la place.

Méthodes sh/bash

Vous pouvez soit appeler votre script avec une redirection :

$ your_script >out.csv

ou vous pouvez insérer ce qui suit comme première ligne dans votre script :

exec >out.csv

La première méthode vous permet de spécifier différents noms de fichiers, tandis que la seconde produit des résultats vers un nom de fichier spécifique. Dans les deux cas, la ligne .output out.csv peuvent être ignorés.

0 votes

Super, merci, maintenant ça marche ! (et il fallait ">>" au lieu de ">", mais je suis un novice sous linux :D)

1 votes

Si une réponse ici, en fait réponses votre question, vous devez cliquer sur la coche sous le total des votes de la réponse (elle doit vous apparaître en gris clair). La question est ainsi considérée comme répondue.

0 votes

Désolé pour le retard, je suis un vrai débutant :D

7voto

DarrenNEEDSHELP Points 93

J'ai récemment créé un shell script qui sera capable de prendre les tables d'un fichier db et de les convertir en fichiers csv.

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

N'hésitez pas à me poser des questions sur mon script :)

0voto

infoclogged Points 1036

Bien que la question porte sur le shell script, je pense qu'elle aidera quelques-uns de ceux qui sont simplement préoccupés par le transfert des données de la base de données sqlite3 vers un fichier csv.

J'ai trouvé un moyen très pratique de le faire avec le navigateur firefox en utilisant l'extension SQLite Manager.

Il suffit de se connecter à votre fichier de base de données sqlite dans Firefox ( SQlite manager -> connect database ) et ensuite Table -> Export table. Vous serez servi avec quelques options supplémentaires que vous pouvez simplement cliquer et essayer.....

A la fin, vous obtenez un fichier csv avec le tableau que vous avez choisi d'exporter.

0voto

Jainmiah Points 307
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

Maintenant, cherchez dans votre système le fichier example.csv et vous l'aurez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X