SQLite: Jak zapisać wynik zapytania jako plik CSV?

159

Jestem nowy w SQLite. Czy istnieje sposób na wyeksportowanie wyników zapytania do pliku CSV?

RayLoveless
źródło
Eksport z powłoki, jedna linijka: stackoverflow.com/a/21741408/911945
Anton Tarasenko,

Odpowiedzi:

249

Od tutaj i komentarz d5e5 za:

Będziesz musiał przełączyć wyjście na tryb csv i przełączyć się na plik wyjściowy.

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
gdw2
źródło
4
gdzie jest zapisywany ten plik?
RayLoveless
34
Jest drukowany na standardowe wyjście, czyli prawdopodobnie twój ekran. Aby zapisać wynik w pliku: sqlite> .output test.csv Aby przywrócić wyniki drukowania do ekranu: sqlite> .output stdout
d5e5
1
Wskaźniki, gdzie mogę dowiedzieć się, jak to zrobić w bibliotece Node?
kuanb
2
Użyj sqlite> .output C: /Users/jdoe/Documents/output.csv, jeśli chcesz użyć określonej ścieżki.
Dustin
Cześć! Ja to zrobiłem. Chociaż moje zapytanie zadziałało idealnie, plik wyjściowy jest pusty. Czy ktoś wie dlaczego?
Valeria Lobos Ossandón
144

Aby dołączyć nazwy kolumn do pliku csv, możesz wykonać następujące czynności:

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

Aby zweryfikować zmiany, które wprowadziłeś, możesz uruchomić to polecenie:

sqlite> .show

Wynik:

echo: off   
explain: off   
headers: on   
mode: csv   
nullvalue: ""  
output: stdout  
separator: "|"   
stats: off   
width: 22 18 
Sai Bharath
źródło
3
Dzięki za pokazanie, jak uzyskać nazwy kolumn! Ta odpowiedź musi być wyższa.
Stan James,
Zwróć uwagę, że sqlite3 dołącza dane wyjściowe na końcu pliku bez usuwania poprzedniej zawartości.
kupgov
1
Ale każde .output filename.csvwykonanie tworzy lub usuwa plik.
kupgov
25

Dobre odpowiedzi z gdw2 i d5e5. Aby to trochę uprościć, oto zalecenia zebrane w jednej serii poleceń:

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
crsierra
źródło
23

Oprócz powyższych odpowiedzi możesz również użyć .oncew podobny sposób .output. Spowoduje to wyświetlenie tylko następnego zapytania do określonego pliku, dzięki czemu nie musisz wykonywać .output stdout.

Więc w powyższym przykładzie

.mode csv
.headers on
.once test.csv
select * from tbl1;
Mata
źródło
1

Alternatywnie możesz to zrobić w jednej linii (testowane w win10)

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

Bonus: używanie PowerShell z poleceniami cmdlet i potokiem (|).

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

gdzie zapytanie.sql jest plikiem zawierającym zapytanie SQL

Alexis
źródło