Wie kann ich die Ergebnisse einer MySQL-Abfrage im CSV-Format ausgeben?

Gibt es eine einfache Möglichkeit, eine MySQL-Abfrage über die Linux-Befehlszeile auszuführen und die Ergebnisse im CSV -Format auszugeben?

Hier's was ich're tun jetzt:

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

Es wird unübersichtlich, wenn es viele Spalten gibt, die von Anführungszeichen umgeben sein müssen, oder wenn es Anführungszeichen in den Ergebnissen gibt, die escaped werden müssen.

Lösung

Von 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';

Bei Verwendung dieses Befehls werden die Spaltennamen nicht exportiert.

Beachten Sie auch, dass /var/lib/mysql-files/orders.csv auf dem Server liegt, auf dem MySQL läuft. Der Benutzer, unter dem der MySQL-Prozess läuft, muss Schreibrechte für das ausgewählte Verzeichnis haben, sonst schlägt der Befehl fehl.

Wenn Sie die Ausgabe von einem entfernten Server (insbesondere einem gehosteten oder virtualisierten Rechner wie Heroku oder Amazon RDS) auf Ihren lokalen Rechner schreiben möchten, ist diese Lösung nicht geeignet.

Kommentare (31)

mysql --batch, -B

Druckt Ergebnisse mit Tabulator als Spaltentrennzeichen, wobei jede Zeile in einer neuen Zeile. Mit dieser Option benutzt mysql nicht die History-Datei. Der Batch-Modus führt zu einem nicht-tabellarischen Ausgabeformat und zum Escaping von Sonderzeichen. Escaping kann deaktiviert werden, indem der Raw-Modus benutzt wird; siehe die Beschreibung der Option --raw.

Sie erhalten dann eine tabulatorgetrennte Datei. Da Kommas (oder Zeichenketten, die Kommas enthalten) nicht escaped werden, ist es nicht einfach, das Trennzeichen auf Komma zu ändern.

Kommentare (9)

Alternativ zur obigen Antwort können Sie auch eine MySQL-Tabelle haben, die die CSV-Engine verwendet.

Dann haben Sie eine Datei auf Ihrer Festplatte, die immer im CSV-Format vorliegt und die Sie einfach kopieren können, ohne sie zu bearbeiten.

Kommentare (2)