Ekspor dari sqlite ke csv menggunakan skrip shell

89

Saya membuat skrip shell untuk mengekspor kueri sqlite ke file csv, seperti ini:

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

Saat menjalankan skrip, output muncul di layar, bukannya disimpan ke "out.csv". Ini berfungsi melakukan metode yang sama dengan baris perintah, tetapi saya tidak tahu mengapa skrip shell gagal mengekspor data ke file.

Apa yang saya lakukan salah?

Rorro
sumber

Jawaban:

125

sqlite3

Anda memiliki panggilan terpisah ke sqlite3untuk setiap baris; pada saat Anda selectberlari, Anda .out out.csvtelah dilupakan.

Mencoba:

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

sebagai gantinya.

metode sh / bash

Anda dapat memanggil skrip Anda dengan pengalihan:

$ your_script >out.csv

atau Anda dapat menyisipkan berikut ini sebagai baris pertama dalam skrip Anda:

exec >out.csv

Metode pertama memungkinkan Anda untuk menentukan nama file yang berbeda, sedangkan yang terakhir menampilkan nama file tertentu. Dalam kedua kasus, garis tersebut .output out.csvdapat diabaikan.

tzot.dll
sumber
Bagus, terima kasih, sekarang sudah berfungsi! (dan diperlukan ">>" bukan ">", tapi saya pemula di linux: D)
Rorro
1
Jika jawaban di sini benar-benar menjawab pertanyaan Anda, Anda harus mengklik tanda centang di bawah total suara jawaban (seharusnya abu-abu terang bagi Anda). Ini menandai pertanyaan sudah terjawab.
tzot
Maaf atas keterlambatannya, saya benar-benar pemula: D
Rorro
<<! ... !adalah apa yang saya butuhkan. Terima kasih.
Rostyslav Druzhchenko
173

Alih-alih perintah titik, Anda dapat menggunakan opsi perintah sqlite3:

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

Ini membuatnya menjadi satu baris.

Juga, Anda dapat menjalankan file skrip sql:

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

Gunakan sqlite3 -helpuntuk melihat daftar opsi yang tersedia.

Hollister
sumber
3
Jauh, jauh lebih baik ... ini harus menjadi solusi yang diterima! KISS :-)
pvandenberk
5
Solusi ini juga akan berfungsi di windows, asalkan sqlite3 ada di jalur Anda atau di direktori yang sama.
amenthes
7

Saya baru-baru ini membuat skrip shell yang akan dapat mengambil tabel dari file db dan mengubahnya menjadi file csv.

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

Jangan ragu untuk mengajukan pertanyaan tentang skrip saya :)

DarrenNEEDSHELP
sumber
3
Ini membantu saya. Anda harus menyalin-tempel 10 baris kode ke jawaban Anda, maka suara positif yang telah saya berikan akan terasa lebih tepat.
mxmlnkn
Skrip kehilangan tanda kutip di sekitar nama tabel (ini membuat kesalahan jika nama tabel memiliki tanda hubung)
Eric F.
0

Meskipun pertanyaannya adalah tentang skrip shell, saya pikir ini akan membantu beberapa dari mereka yang hanya peduli tentang mentransfer data dari database sqlite3 ke file csv.

Saya menemukan cara yang sangat mudah untuk melakukannya dengan browser firefox menggunakan ekstensi SQLite Manager.

Cukup sambungkan ke file database sqlite Anda di firefox (manajer SQlite -> sambungkan database) lalu Tabel -> Ekspor tabel. Anda akan disajikan dengan beberapa opsi lagi yang bisa Anda klik dan coba ....

Pada akhirnya Anda mendapatkan file csv dengan tabel yang telah Anda pilih untuk diekspor.

infoclogged
sumber
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

Sekarang cari di sistem Anda untuk file example.csv dan Anda akan mendapatkannya.

Jainmiah
sumber