So exportieren Sie eine CSV-Datei über die MySQL-Befehlszeile

Inhalt

Datentransport zwischen Anwendungen.

Durch Kommas getrennte Wertedateien (CSV) sie sind eine Möglichkeit, Daten zwischen Anwendungen zu übertragen. Datenbanken wie MySQL und Tabellenkalkulationssoftware wie Excel unterstützen den Import und Export über CSV, damit du es verwenden kannst CSV-Dateien um Daten zwischen den beiden auszutauschen.

CSV-Dateien sind Klartext, daher sind sie von Natur aus leichtgewichtig und einfach aus MySQL zu exportieren.

Vom Datenbankserver

Wenn Sie Zugriff auf den Server haben, auf dem MySQL läuft, Sie können eine Auswahl mit dem Symbol INTO OUTFILE Befehl.

SELECT-ID, Spalte1, column2 FROM table
INTO OUTFILE '/tmp/mysqlfiles/table.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'

Dadurch wird eine CSV-Datei generiert, um /tmp/mysqlfiles/table.csv, oder wo Sie es konfiguriert haben. Sie müssen sicherstellen, dass der Benutzer, der MySQL ausführt, (allgemein mysql Ö root) hat Besitz und Schreibzugriff auf das Verzeichnis.

Sie müssen auch sicherstellen, dass secure_file_priv Die Konfiguration ermöglicht MySQL den Zugriff auf dieses Verzeichnis. Dies, standardmäßig, blockiert Lese- und Schreibzugriff auf SQL-Abfragen. Das ist eine gute Sache; wenn Ihr Code für SQL-Injection anfällig ist, Jeder potenzielle Angreifer hätte nur Zugriff auf MySQL und nicht auf den Rest des Dateisystems.

Sie können bestimmte Verzeichnisse auf die Whitelist setzen, indem Sie Ihre MySQL-Konfigurationsdatei bearbeiten (im Allgemeinen in /etc/my.cnf) einschließen:

[mysqld]
sichere-datei-priv = "/tmp/mysqlfiles"

Damit kann MySQL lesen und schreiben /tmp/mysqlfiles/ (womit sollst du kreieren mkdir). Sobald MySQL Dateien exportieren kann, sollte in der Lage sein, die Abfrage auszuführen und CSV-Dateien zu generieren.

Mit dem ENCLOSED BY Einstellung, Kommas werden korrekt maskiert, als Beispiel:

"3","Fliehen, Dies","Auch, Dies"

Die Sie direkt in jedes Tabellenkalkulationsprogramm oder andere Software übernehmen und importieren können.

Tabelle einer durch Kommas getrennten Liste.

Bitte beachten Sie, dass die exportierte CSV-Datei keine Spaltenüberschriften enthält, aber die Spalten sind in der gleichen Reihenfolge wie die SELECT Stellungnahme. Zur selben Zeit, Nullwerte werden exportiert als N, was ist das erwartete verhalten, aber wenn du das ändern willst, Sie können die Auswahl durch Umschließen ändern ifnull(field, "") um ihre Felder in ihren SELECT Stellungnahme.

Von der MySQL-Befehlszeile

Wenn Sie nur über die Befehlszeile Zugriff auf die MySQL-Instanz haben, und du hast keinen Zugriff auf den Server selbst (wie wenn du es nicht schaffst, Im Falle des Amazon RDS), das Problem ist etwas komplexer. Während Sie verwenden können FIELDS TERMINATED BY ',' auf dem Server, um eine durch Kommas getrennte Liste zu generieren, MySQL CLI wird standardmäßig mit Tabs versehen.

Geben Sie einfach eine Abfrage über die Befehlszeile ein und leiten Sie sie an eine Datei weiter:

mysql -u root -e "auswählen * aus Datenbank;" > Ausgabe.tsv

Weil die MySQL-Ausgabe mit Tabs versehen ist, das nennt man TSV-Datei, zum “Durch Tabulatoren getrennte Werte”, und es kann in einigen Programmen anstelle Ihrer CSV-Datei funktionieren, wie Tabellenimporte. Aber es ist keine CSV-Datei und das Konvertieren in eine ist schwierig.

Sie können jeden Tab einfach durch ein Komma ersetzen, was funktionieren würde, aber dazu führen würde, dass es fehlschlägt, wenn die Eingabedaten Kommas enthalten. Wenn Sie sich absolut sicher sind, dass Ihre TSV-Datei keine Kommas enthält (wenden Sie sich an grep), Sie können die Registerkarten durch ersetzen sed:

sed "s/t/,/g" Ausgabe.tsv > Ausgabe.csv

Aber wenn Sie Kommas in Ihren Daten haben, du musst a . verwenden viel länger regulärer Satz:

sed "S/'/'/;NS/","/g;s/^/"/;s/$/"/;s/n//g" Ausgabe.tsv > Ausgabe.csv

Dadurch werden die in Anführungszeichen gesetzten Felder korrekt maskiert, Was wird das Problem der Kommas lösen?.

Notiz: das Tabulatorzeichen t es ist nicht standardmäßig. Unter macOS und BSD, ist nicht aktiviert, die eine Störung von jedem erzeugt “T” Kleinbuchstaben verursachen sed falsche Kommas einfügen. Um das zu lösen, Sie müssen anstelle von ein literales Tabulatorzeichen verwenden t:

sed "s/ /,/g" Ausgabe.tsv > Ausgabe.csv

Wenn Ihre Eingabedaten Registerkarten enthalten, Sie haben Pech und müssen selbst eine CSV-Datei mit einer Skriptsprache generieren.

Mach es manuell mit einer echten Programmiersprache

MySQL (und die meisten Datenbanken) sind darauf ausgelegt, mit ihm zu interagieren, Sie haben wahrscheinlich bereits eine mit MySQL verbundene Programmiersprache. Die meisten Sprachen können auch auf Festplatte schreiben, So können Sie Ihre eigenen CSV-Ausgabeskripte erstellen, indem Sie die Datenbankfelder direkt lesen, sie korrekt zu maskieren und eine durch Kommas getrennte Datei zu schreiben.

Ein Beispiel in Python.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.