MySQL sorgu sonuçlarının CSV formatında çıktısı nasıl alınır?

Linux komut satırından bir MySQL sorgusu çalıştırmanın ve sonuçları CSV biçiminde çıktılamanın kolay bir yolu var mı?

İşte şu anda yaptığım şey:

mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/        /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ

Tırnak işaretleri ile çevrelenmesi gereken çok sayıda sütun olduğunda veya sonuçlarda kaçılması gereken tırnak işaretleri olduğunda karmaşıklaşır.

Çözüm

http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/ adresinden

SELECT order_id,product_name,qty
FROM orders
WHERE foo = 'bar'
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

Bu komut kullanıldığında sütun adları dışa aktarılmayacaktır.

Ayrıca /var/lib/mysql-files/orders.csv dosyasının MySQL'i çalıştıran sunucu üzerinde olacağını unutmayın. MySQL işleminin altında çalıştığı kullanıcı, seçilen dizine yazma izinlerine sahip olmalıdır, aksi takdirde komut başarısız olur.

Uzak bir sunucudan (özellikle Heroku veya Amazon RDS gibi barındırılan veya sanallaştırılan bir makine) yerel makinenize çıktı yazmak istiyorsanız, bu çözüm uygun değildir.

Yorumlar (31)

mysql --batch, -B

Sütun ayırıcı olarak tab kullanarak sonuçları yazdır, her satır bir yeni satır. Bu seçenekle mysql geçmiş dosyasını kullanmaz. Toplu mod, tablosal olmayan çıktı biçimiyle ve özel karakterler. Ham mod kullanılarak kaçış devre dışı bırakılabilir; bkz. --raw seçeneği için açıklama.

Bu size sekmeyle ayrılmış bir dosya verecektir. Virgüller (veya virgül içeren dizeler) öncelenmediğinden, sınırlayıcıyı virgül olarak değiştirmek kolay değildir.

Yorumlar (9)

Yukarıdaki cevaba alternatif olarak, CSV motorunu kullanan bir MySQL tablosuna sahip olabilirsiniz.

Böylece sabit diskinizde her zaman CSV formatında olacak ve işlem yapmadan kopyalayabileceğiniz bir dosyanız olacaktır.

Yorumlar (2)