Onko olemassa helppo tapa suorittaa MySQL-kysely Linuxin komentoriviltä ja tulostaa tulokset [CSV]-muodossa1?
Tässä on mitä teen nyt:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Homma menee sekaisin, kun on paljon sarakkeita, jotka on ympäröity lainausmerkeillä, tai jos tuloksissa on lainausmerkkejä, jotka on poistettava.
Osoitteesta http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
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';
Tätä komentoa käyttämällä sarakkeiden nimiä ei viedä.
Huomaa myös, että /var/lib/mysql-files/orders.csv
on sillä palvelimella, jolla MySQL on käynnissä. Käyttäjällä, jonka alaisuudessa MySQL-prosessi toimii, on oltava oikeudet kirjoittaa valittuun hakemistoon, tai komento epäonnistuu.
Jos haluat kirjoittaa tulosteet paikalliseen koneeseesi etäpalvelimelta (erityisesti isännöidyltä tai virtualisoidulta koneelta, kuten Heroku tai Amazon RDS), tämä ratkaisu ei sovellu.
mysql --batch, -B
Tulosta tulokset käyttämällä tabulaattoria sarakkeiden erottimena, ja jokainen rivi on sarakkeessa uudella rivillä. Tällä vaihtoehdolla mysql ei käytä historiatiedostoa. Batch-tilassa tulostusmuoto ei ole taulukkomuotoinen, ja tulosteet on erotettava erikoismerkit. Escaping voidaan poistaa käytöstä käyttämällä raw-tilaa; katso kohta --raw-vaihtoehdon kuvaus.
Näin saat tabulaattorilla erotetun tiedoston. Koska pilkkuja (tai pilkkua sisältäviä merkkijonoja) ei vältetä, ei ole yksinkertaista muuttaa erotinta pilkuksi.