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?

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ć.


Ś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.


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 :)


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.