Export von SQLite nach CSV mithilfe eines Shell-Skripts

86

Ich erstelle ein Shell-Skript, um eine SQLite-Abfrage in eine CSV-Datei zu exportieren.

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

Bei der Ausführung des Skripts wird die Ausgabe auf dem Bildschirm angezeigt, anstatt in "out.csv" gespeichert zu werden. Es funktioniert genauso mit der Befehlszeile, aber ich weiß nicht, warum das Shell-Skript keine Daten in die Datei exportieren kann.

Was mache ich falsch?

Rorro
quelle

Antworten:

125

sqlite3

Sie haben sqlite3für jede Leitung einen eigenen Anruf . Zu dem Zeitpunkt, an dem Sie selectlaufen, ist Ihr .out out.csvvergessen.

Versuchen:

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

stattdessen.

sh / bash Methoden

Sie können Ihr Skript entweder mit einer Umleitung aufrufen:

$ your_script >out.csv

oder Sie können Folgendes als erste Zeile in Ihr Skript einfügen:

exec >out.csv

Mit der ersteren Methode können Sie verschiedene Dateinamen angeben, während die letztere unter einem bestimmten Dateinamen ausgegeben wird. In beiden Fällen kann die Zeile .output out.csvignoriert werden.

tzot
quelle
Großartig, danke, jetzt funktioniert es! (und es wird ">>" anstelle von ">" benötigt, aber ich bin ein Neuling unter Linux: D)
Rorro
1
Wenn eine Antwort hier tatsächlich Ihre Frage beantwortet , sollten Sie auf das Häkchen unter den Gesamtstimmen der Antwort klicken (sie sollte für Sie hellgrau erscheinen). Dies markiert die Frage als beantwortet.
Zot
Entschuldigung für die Verzögerung, ich bin ein echter Neuling: D
Rorro
<<! ... !ist genau das, was ich brauchte. Vielen Dank.
Rostyslav Druzhchenko
168

Anstelle der Punktbefehle können Sie auch die Befehlsoptionen sqlite3 verwenden:

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

Dies macht es zu einem Einzeiler.

Sie können auch eine SQL-Skriptdatei ausführen:

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

Verwenden Sie sqlite3 -helpdiese Option, um die Liste der verfügbaren Optionen anzuzeigen.

Hollister
quelle
2
Viel, viel besser ... das sollte die akzeptierte Lösung sein! KISS :-)
Pvandenberk
4
Diese Lösung funktioniert auch unter Windows, vorausgesetzt, sqlite3 befindet sich in Ihrem Pfad oder im selben Verzeichnis.
Amenthes
7

Ich habe kürzlich ein Shell-Skript erstellt, mit dem die Tabellen aus einer Datenbankdatei in CSV-Dateien konvertiert werden können.

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

Fühlen Sie sich frei, mir Fragen zu meinem Skript zu stellen :)

DarrenNEEDSHELP
quelle
2
Das hat mir geholfen. Sie sollten Ihre 10 Codezeilen kopieren und in Ihre Antwort einfügen, dann würde sich die bereits abgegebene Gegenstimme gerechtfertigter anfühlen.
mxmlnkn
Dem Skript fehlen Anführungszeichen um den Namen der Tabelle (es wird ein Fehler ausgegeben, wenn der Tabellenname Bindestriche enthält)
Eric F.
0

Obwohl es sich bei der Frage um ein Shell-Skript handelt, denke ich, dass es nur wenigen helfen wird, die sich nur darum kümmern, die Daten aus der sqlite3-Datenbank in eine CSV-Datei zu übertragen.

Ich habe einen sehr praktischen Weg gefunden, dies mit dem Firefox-Browser unter Verwendung der SQLite Manager-Erweiterung zu tun.

Stellen Sie einfach eine Verbindung zu Ihrer SQLite-Datenbankdatei in Firefox her (SQlite-Manager -> Datenbank verbinden) und dann Tabelle -> Tabelle exportieren. Sie erhalten weitere Optionen, die Sie einfach anklicken und ausprobieren können.

Am Ende erhalten Sie eine CSV-Datei mit der Tabelle, die Sie für den Export ausgewählt haben.

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

Suchen Sie nun in Ihrem System nach der Datei "example.csv" und Sie erhalten sie.

Jainmiah
quelle