Eksportuj z sqlite do csv przy użyciu skryptu powłoki

88

Robię skrypt powłoki, aby wyeksportować zapytanie sqlite do pliku csv, tak jak to:

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

Podczas wykonywania skryptu dane wyjściowe pojawiają się na ekranie, zamiast być zapisywane w pliku „out.csv”. Działa w ten sam sposób z wierszem poleceń, ale nie wiem, dlaczego skrypt powłoki nie eksportuje danych do pliku.

Co ja robię źle?

Rorro
źródło

Odpowiedzi:

125

sqlite3

Masz osobne wywołanie sqlite3dla każdej linii; gdy selectbiegasz, .out out.csvzostałeś zapomniany.

Próbować:

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

zamiast.

metody sh / bash

Możesz wywołać swój skrypt z przekierowaniem:

$ your_script >out.csv

lub możesz wstawić następujący wiersz jako pierwszą linię w swoim skrypcie:

exec >out.csv

Pierwsza metoda umożliwia określenie różnych nazw plików, podczas gdy druga wyprowadza do określonej nazwy pliku. W obu przypadkach linię .output out.csvmożna zignorować.

tzot
źródło
Świetnie, dzięki, teraz działa! (i jest potrzebne „>>” zamiast „>”, ale jestem nowicjuszem w Linuksie: D)
Rorro
1
Jeśli odpowiedź w tym miejscu faktycznie odpowiada na Twoje pytanie, kliknij znacznik wyboru pod łączną liczbą głosów na odpowiedź (powinien on być dla Ciebie jasnoszary). To oznacza pytanie jako odpowiedź.
tzot
Przepraszam za opóźnienie, jestem prawdziwym nowicjuszem: D
Rorro
<<! ... !jest dokładnie tym, czego potrzebowałem. Dzięki.
Rostyslav Druzhchenko
172

Zamiast poleceń z kropką można użyć opcji polecenia sqlite3:

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

To sprawia, że ​​jest to jedna linijka.

Możesz także uruchomić plik skryptu sql:

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

Użyj, sqlite3 -helpaby wyświetlić listę dostępnych opcji.

Hollister
źródło
3
Dużo, dużo lepiej ... to powinno być przyjęte rozwiązanie! KISS :-)
pvandenberk
5
To rozwiązanie będzie działać również w systemie Windows, pod warunkiem, że sqlite3 znajduje się na twojej ścieżce lub w tym samym katalogu.
amenthes
7

Niedawno stworzyłem skrypt powłoki, który będzie w stanie pobrać tabele z pliku db i przekonwertować je na pliki csv.

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

Zapraszam do zadawania pytań dotyczących mojego scenariusza :)

DarrenNEEDSHELP
źródło
3
To mi pomogło. Powinieneś skopiować i wkleić 10 linii kodu do swojej odpowiedzi, wtedy głos za, który już dałem, będzie bardziej uzasadniony.
mxmlnkn
W skrypcie brakuje cudzysłowów wokół nazwy tabeli (zgłasza błąd, jeśli nazwa tabeli zawiera myślniki)
Eric F.
0

Chociaż pytanie dotyczy skryptu powłoki, myślę, że pomoże to niewielu z tych, którzy tylko przejmują się przeniesieniem danych z bazy danych sqlite3 do pliku csv.

Znalazłem bardzo wygodny sposób na zrobienie tego za pomocą przeglądarki Firefox z rozszerzeniem SQLite Manager.

Po prostu połącz się z plikiem bazy danych sqlite w przeglądarce Firefox (menedżer SQlite -> połącz bazę danych), a następnie Tabela -> Eksportuj tabelę. Otrzymasz więcej opcji, które możesz po prostu kliknąć i wypróbować ....

W końcu otrzymasz plik csv z tabelą, którą wybrałeś do wyeksportowania.

infoclogged
źródło
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

Teraz wyszukaj w swoim systemie plik np. Csv, a otrzymasz go.

Jainmiah
źródło