SQLite: Comment enregistrer le résultat d'une requête sous forme de fichier CSV?

159

Je suis nouveau sur SQLite. Existe-t-il un moyen d'exporter les résultats d'une requête dans un fichier CSV?

RayLoveless
la source
Exportation de shell, one-liner: stackoverflow.com/a/21741408/911945
Anton Tarasenko

Réponses:

249

D' ici et le commentaire de d5e5:

Vous devrez basculer la sortie en mode csv et passer en sortie de fichier.

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
gdw2
la source
4
où ce fichier est-il enregistré?
RayLoveless
34
Il est imprimé sur la sortie standard, c'est-à-dire sur votre écran probablement. Pour enregistrer la sortie dans un fichier: sqlite> .output test.csv Pour restaurer les résultats d'impression à l'écran: sqlite> .output stdout
d5e5
1
Des pointeurs sur où je peux trouver comment faire cela avec la bibliothèque Node?
kuanb
2
Utilisez sqlite> .output C: /Users/jdoe/Documents/output.csv si vous souhaitez utiliser un chemin spécifique.
Dustin
Salut! J'ai fait ça. Bien que ma requête ait parfaitement fonctionné, la sortie du fichier est vide. Est-ce que quelqu'un sait pourquoi?
Valeria Lobos Ossandón
144

Pour inclure les noms de colonnes dans votre fichier csv, vous pouvez effectuer les opérations suivantes:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout

Pour vérifier les modifications que vous avez apportées, vous pouvez exécuter cette commande:

sqlite> .show

Production:

echo: off   
explain: off   
headers: on   
mode: csv   
nullvalue: ""  
output: stdout  
separator: "|"   
stats: off   
width: 22 18 
Sai Bharat
la source
3
Merci d'avoir montré comment obtenir les noms de colonnes! Cette réponse doit être plus élevée.
Stan James
Notez que sqlite3 ajoute la sortie à la fin du fichier sans effacement du contenu précédent.
kupgov
1
Mais chaque .output filename.csvexécution crée ou efface le fichier.
kupgov
25

Bonnes réponses de gdw2 et d5e5. Pour simplifier les choses, voici les recommandations rassemblées en une seule série de commandes:

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
Crsierra
la source
23

En plus des réponses ci-dessus, vous pouvez également utiliser .oncede la même manière que .output. Cela génère uniquement la requête suivante dans le fichier spécifié, de sorte que vous n'ayez pas à suivre avec.output stdout .

Donc dans l'exemple ci-dessus

.mode csv
.headers on
.once test.csv
select * from tbl1;
Tapis
la source
1

Sinon, vous pouvez le faire en une seule ligne (testé dans win10)

sqlite3 -help
sqlite3 -header -csv db.sqlite 'select * from tbl1;' > test.csv

Bonus: utilisation de PowerShell avec l'applet de commande et le tube (|).

get-content query.sql | sqlite3 -header -csv db.sqlite > test.csv

où query.sql est un fichier contenant votre requête SQL

Alexis
la source