SQLite: Bagaimana cara menyimpan hasil kueri sebagai file CSV?

159

Saya baru mengenal SQLite. Apakah ada cara saya dapat mengekspor hasil permintaan ke file CSV?

Tanpa Rayuan
sumber
Ekspor dari shell, satu-liner: stackoverflow.com/a/21741408/911945
Anton Tarasenko

Jawaban:

249

Dari sini dan komentar d5e5:

Anda harus mengalihkan output ke mode csv dan beralih ke output file.

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
gdw2
sumber
4
dimana file ini disimpan?
Ray Tanpa Cinta
34
Ini dicetak ke output standar, yaitu layar Anda mungkin. Untuk menyimpan hasil dalam file: sqlite> .output test.csv Untuk mengembalikan hasil pencetakan ke layar: sqlite> .output stdout
d5e5
1
Pointer di mana saya bisa mengetahui bagaimana melakukan ini di w / perpustakaan Node?
kuanb
2
Gunakan sqlite> .output C: /Users/jdoe/Documents/output.csv jika Anda ingin menggunakan jalur tertentu.
Dustin
Hai! Saya melakukan ini. Meskipun kueri saya berfungsi dengan baik, output file kosong. Apakah ada yang tahu kenapa?
Valeria Lobos Ossando
144

Untuk memasukkan nama kolom ke file csv Anda, Anda dapat melakukan hal berikut:

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

Untuk memverifikasi perubahan yang telah Anda buat, Anda dapat menjalankan perintah ini:

sqlite> .show

Keluaran:

echo: off   
explain: off   
headers: on   
mode: csv   
nullvalue: ""  
output: stdout  
separator: "|"   
stats: off   
width: 22 18 
Sai Bharath
sumber
3
Terima kasih telah menunjukkan cara mendapatkan nama kolom! Jawaban ini harus lebih tinggi.
Stan James
Perhatikan bahwa sqlite3 menambahkan output ke akhir file tanpa menghapus konten sebelumnya.
kupgov
1
Tetapi setiap .output filename.csveksekusi membuat atau menghapus file.
kupgov
25

Jawaban bagus dari gdw2 dan d5e5. Untuk membuatnya sedikit lebih sederhana di sini adalah rekomendasi yang digabungkan dalam satu rangkaian perintah:

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
crsierra
sumber
23

Selain jawaban di atas, Anda juga dapat menggunakan .oncecara yang serupa dengan .output. Ini hanya menampilkan permintaan berikutnya ke file yang ditentukan, sehingga Anda tidak harus mengikuti.output stdout .

Jadi pada contoh di atas

.mode csv
.headers on
.once test.csv
select * from tbl1;
Tikar
sumber
1

Atau Anda dapat melakukannya dalam satu baris (diuji pada win10)

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

Bonus: Menggunakan PowerShell dengan cmdlet dan pipa (|).

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

di mana query.sql adalah file yang berisi permintaan SQL Anda

Alexis
sumber