Lebih
Bagaimana output hasil query MySQL dalam format CSV?
Apakah ada cara mudah untuk menjalankan query MySQL dari Linux command line dan output hasil di CSV format?
Berikut ini's apa yang saya'm lakukan sekarang:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Itu akan berantakan ketika ada banyak kolom yang harus dikelilingi oleh tanda kutip, atau jika ada tanda kutip dalam hasil yang harus melarikan diri.
1112
31
Dari http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
Menggunakan perintah ini kolom nama tidak akan diekspor.
Juga perhatikan bahwa
/var/lib/mysql-files/order.csv
akan di server yang menjalankan MySQL. Pengguna bahwa MySQL adalah proses yang berjalan di bawah harus memiliki izin untuk menulis ke direktori yang dipilih, atau perintah akan gagal.Jika anda ingin menulis output untuk mesin lokal anda dari remote server (terutama host atau virtualisasi mesin seperti Heroku atau Amazon RDS), solusi ini tidak cocok.
Yang tab terpisah. Pipa seperti itu untuk mendapatkan yang benar CSV (terima kasih @therefromhere):
Ini akan memberikan anda sebuah tab file dipisahkan. Sejak koma (atau string yang mengandung koma) yang tidak lolos itu tidak mudah untuk mengubah delimiter koma.
Berikut ini's cukup degil cara untuk melakukannya. Ternyata di suatu tempat, dapat't mengambil kredit apapun
mysql --user=wibble --password goyangan -B -e "select * from vehicle_categories;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > vehicle_categories.csv
Bekerja dengan cukup baik. Sekali lagi meskipun regex membuktikan menulis saja.
Regex Penjelasan:
Jadi, menempatkan itu semua bersama-sama:
Unix/Cygwin hanya, pipa melalui 'tr':
N. B.: Ini menangani tidak tertanam koma, atau tertanam tab.
Ini menyelamatkan saya beberapa kali. Cepat dan bekerja!
Contoh:
Untuk kelengkapan anda bisa mengkonversi ke csv (tapi hati-hati karena tab bisa dalam bidang nilai - nilai misalnya bidang teks)
OUTFILE solusi yang diberikan oleh Paulus Tomblin menyebabkan file yang akan ditulis pada MySQL server itu sendiri, sehingga ini akan bekerja hanya jika anda memiliki FILE akses, serta akses login atau cara lain untuk mengambil file dari kotak itu.
Jika anda don't memiliki akses tersebut, dan tab-delimited output adalah pengganti yang wajar untuk CSV (misalnya, jika tujuan akhir anda adalah untuk impor ke Excel), maka Serbaut's solusi (menggunakan
mysql --batch
dan opsional--mentah
) adalah cara untuk pergi.MySQL Workbench dapat mengekspor recordsets ke CSV, dan tampaknya untuk menangani koma di bidang-bidang yang sangat baik. CSV membuka di OpenOffice baik-baik saja.
Bagaimana tentang:
Semua solusi di sini untuk saat ini, kecuali MySQL workbench satu, adalah tidak benar dan sangat mungkin tidak aman (yaitu masalah keamanan) untuk setidaknya beberapa konten mungkin di db mysql.
MYSQL Workbench (dan demikian pula PHPMyAdmin) memberikan secara resmi solusi yang tepat, tetapi dirancang untuk men-download keluaran untuk pengguna's lokasi. Mereka're tidak begitu berguna untuk hal-hal seperti mengotomatisasi data ekspor.
Hal ini tidak mungkin untuk menghasilkan andal benar csv dari output
mysql -B -e 'PILIH ...'
karena itu tidak dapat menyandikan kereta kembali dan putih ruang di bidang. The ' s' bendera ke mysql tidak melakukan backslash melarikan diri, dan mungkin menyebabkan solusi yang tepat. Namun, dengan menggunakan bahasa scripting (satu dengan layak struktur data internal yang tidak bash), dan perpustakaan di mana masalah pengkodean telah hati-hati bekerja keluar jauh lebih aman.Saya berpikir tentang menulis script untuk ini, tetapi segera setelah saya berpikir tentang apa yang saya'd sebut itu, terpikir olehku untuk mencari karya yang sudah ada dengan nama yang sama. Sementara aku belum't pergi lebih dari itu secara menyeluruh, solusi di https://github.com/robmiller/mysql2csv tampak menjanjikan. Tergantung pada aplikasi anda, yaml pendekatan untuk menentukan perintah-perintah SQL yang mungkin atau mungkin tidak menarik meskipun. I'm juga tidak senang dengan persyaratan untuk versi yang lebih baru dari ruby dari datang sebagai standar dengan saya Ubuntu 12.04 laptop atau server Debian Squeeze. Ya aku tahu aku bisa menggunakan RVM, tapi aku'd agak tidak mempertahankan bahwa untuk suatu tujuan sederhana.
Mudah-mudahan seseorang akan menunjukkan sebuah alat yang cocok, yang's memiliki sedikit pengujian. Kalau tidak, aku'll mungkin update ini ketika aku menemukan atau menulis satu.
Dari baris perintah anda, anda dapat melakukan ini:
Kredit: https://stackoverflow.com/questions/9536224/exporting-table-from-amazon-rds-into-a-csv-file
Banyak jawaban pada halaman ini adalah lemah karena mereka don't menangani kasus umum dari apa yang dapat terjadi dalam format CSV. misalnya koma dan kutipan tertanam di ladang dan kondisi lain yang selalu datang pada akhirnya. Kita perlu solusi umum yang bekerja untuk semua berlaku CSV input data.
Berikut ini's sederhana dan kuat solusi dalam Python:
Nama file
tab2csv
, meletakkannya di jalan anda, memberikan izin mengeksekusi, kemudian menggunakannya seperti ini:Python CSV-fungsi penanganan menutupi kasus sudut untuk CSV format input(s).
Ini bisa ditingkatkan untuk menangani file yang sangat besar melalui streaming pendekatan.
MEMBUAT TABEL () (PILIH data DARI other_table ) ENGINE=CSV ;
Jawaban ini menggunakan Python dan tempat perpustakaan pihak ketiga, PyMySQL. I'm menambahkan ini karena Python's csv perpustakaan adalah cukup kuat untuk benar menangani banyak rasa yang berbeda dari
.csv
dan tidak ada jawaban lain yang menggunakan kode Python untuk berinteraksi dengan database.Ini adalah sederhana, dan bekerja pada apa pun tanpa perlu modus batch atau file output:
Penjelasan:
"
dengan","
di bidang masing-masing -->menggantikan(field1, ',"', '"",')
concat('",', result1, '",')
concat_ws(',', quoted1, quoted2, ...)
Yang's itu!
Atau untuk jawaban di atas, anda dapat memiliki sebuah tabel MySQL yang menggunakan CSV mesin.
Maka anda akan memiliki sebuah file pada hard disk yang akan selalu berada dalam format CSV yang anda hanya bisa copy tanpa pengolahan.
Untuk memperluas pada jawaban sebelumnya, berikut satu-kapal ekspor satu tabel yang dipisahkan tab file. It's cocok untuk otomatisasi, mengekspor database setiap hari atau lebih.
Mudah, kita dapat menggunakan teknik yang sama untuk daftar keluar MySQL's tabel, dan untuk menggambarkan kolom pada satu tabel:
Juga, jika anda'kembali melakukan query pada Bash command line, saya percaya
tr
perintah ini dapat digunakan untuk pengganti default tab untuk sewenang-wenang pembatas.$ echo "SELECT * FROM Table123" | mysql Database456 | tr " t" ,
Bangunan di user7610, berikut adalah cara terbaik untuk melakukannya. Dengan
mysql outfile
ada 60 menit dari kepemilikan file dan timpa masalah.It's tidak keren, tapi itu bekerja dalam 5 menit.
php csvdump.php localhost password root database tablename > apa pun yang anda suka.csv
Tidak persis seperti format CSV, tapi
tee
command dari MySQL klien dapat digunakan untuk menyimpan output ke a lokal file:Anda dapat menonaktifkannya dengan menggunakan
notee
.Masalah dengan
PILIH ... KE OUTFILE ...;
adalah bahwa hal itu membutuhkan izin untuk menulis file-file di server.