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.