Was ist der beste / schnellste Weg, um eine CSV-Datei in eine MySQL-Tabelle hochzuladen? Ich möchte für die erste Datenzeile als Spaltennamen verwendet werden.
Ich habe es gefunden:
So importieren Sie eine CSV-Datei in eine MySQL-Tabelle
Aber die einzige Antwort war, eine GUI und keine Shell zu verwenden?
Antworten:
Anstatt ein Skript zum Abrufen von Informationen aus einer CSV-Datei zu schreiben, können Sie MYSQL direkt damit verknüpfen und die Informationen mithilfe der folgenden SQL-Syntax hochladen.
Um eine Excel-Datei in MySQL zu importieren, exportieren Sie sie zunächst als CSV-Datei. Entfernen Sie die CSV-Header aus der generierten CSV-Datei zusammen mit leeren Daten, die Excel möglicherweise am Ende der CSV-Datei eingefügt hat.
Sie können es dann in eine MySQL-Tabelle importieren, indem Sie Folgendes ausführen:
Lesen Sie weiter: Importieren Sie die CSV-Datei direkt in MySQL
BEARBEITEN
Für Ihren Fall müssen Sie zuerst einen Interpreter schreiben, um die erste Zeile zu finden und sie als Spaltennamen zuzuweisen.
EDIT-2
Aus MySQL-Dokumenten zur
LOAD DATA
Syntax :Daher können Sie die folgende Anweisung verwenden:
quelle
IGNORE 1 LINES
der Abfrage hinzufügenHier ist ein einfaches PHP-Befehlszeilenskript, das genau das tut, was Sie brauchen:
Es wird eine Tabelle basierend auf der ersten Zeile erstellt und die verbleibenden Zeilen in diese importiert. Hier ist die Befehlszeilensyntax:
quelle
fields terminated by ','
... es funktioniert sogar mit teilweise doppelt zitierten CSVs.ENCLOSED BY '\"'
... auch viele Leute werden es brauchen,LINES TERMINATED BY '\r\n'
wenn sie eine CSV von Windows verwenden. Und schließlich ist es ratsam, den Feldnamen mit Backticks zu entkommen, falls Leerzeichen vorhanden sind:$columns .= "`$column` varchar(250)";
Wenn Sie die Möglichkeit haben, phpadmin zu installieren, gibt es einen Importbereich, in dem Sie CSV-Dateien in Ihre Datenbank importieren können. Es gibt sogar ein Kontrollkästchen, mit dem Sie den Header auf die erste Zeile der Datei setzen können, die die Tabellenspaltennamen enthält Die erste Zeile wird Teil der Daten
quelle
Erstellen Sie zunächst eine Tabelle in der Datenbank mit der gleichen Anzahl von Spalten wie in der CSV-Datei.
Verwenden Sie dann die folgende Abfrage
quelle
Um Daten aus einer Textdatei oder einer CSV-Datei zu laden, lautet der Befehl
Im obigen Befehl muss in meinem Fall nur eine Spalte geladen werden, sodass kein "terminiert von" und "eingeschlossen von" vorhanden ist, sodass ich sie leer gelassen habe. Andernfalls kann der Programmierer das Trennzeichen eingeben. für zB. , (Komma) oder "oder; oder irgendetwas.
** für Leute, die MySQL Version 5 und höher verwenden **
Vor dem Laden der Datei in MySQL muss sichergestellt werden, dass unter der Schleppleine Seite hinzugefügt werden
etc/mysql/my.cnf
Befehl my.cnf zu bearbeiten ist
sudo vi /etc/mysql/my.cnf
quelle
Wenn Sie mysql als "mysql -u -p --local-infile" starten, funktioniert es einwandfrei
quelle
Ich habe dazu einen Code geschrieben, ich werde ein paar Schnipsel einfügen:
Rufen Sie dann die CSV-Header ab, damit Sie mysql mitteilen können, wie es importiert werden soll (Hinweis: Stellen Sie sicher, dass Ihre mysql-Spalten genau mit den csv-Spalten übereinstimmen):
Dann senden Sie Ihre Anfrage an den MySQL-Server:
quelle
Ich habe einige Zeit damit gerungen. Das Problem liegt nicht darin, wie die Daten geladen werden, sondern wie die Tabelle erstellt wird, um sie zu speichern. Sie müssen eine DDL-Anweisung generieren, um die Tabelle zu erstellen, bevor Sie die Daten importieren.
Besonders schwierig, wenn die Tabelle eine große Anzahl von Spalten enthält.
Hier ist ein Python-Skript, das (fast) den Job macht:
Das zu lösende Problem besteht darin, dass der endgültige Feldname und die Datentypdeklaration mit einem Komma abgeschlossen werden und der mySQL-Parser dies nicht toleriert.
Natürlich hat es auch das Problem, dass es für jedes Feld den TEXT-Datentyp verwendet. Wenn die Tabelle mehrere hundert Spalten enthält, wird die Tabelle durch VARCHAR (64) zu groß.
Dies scheint auch bei der maximalen Spaltenanzahl für mySQL zu brechen. Dann ist es Zeit, zu Hive oder HBase zu wechseln, wenn Sie dazu in der Lage sind.
quelle
So habe ich es in Python mit csv und dem MySQL Connector gemacht :
Wichtige Punkte
'rb'
binärskipinitialspace
Option.255
es nicht breit genug ist, werden beim Einfügen Fehler angezeigt und Sie müssen von vorne beginnen.ALTER TABLE t MODIFY `Amount` DECIMAL(11,2);
ALTER TABLE t ADD `id` INT PRIMARY KEY AUTO_INCREMENT;
quelle
Importieren Sie CSV-Dateien in die MySQL-Tabelle
Besuche: http://www.webslessons.com/2014/02/import-csv-files-using-php-and-mysql.html
quelle
Wie andere bereits erwähnt haben, funktioniert die lokale Infile für Ladedaten einwandfrei. Ich habe das PHP-Skript ausprobiert, das Hawkee gepostet hat, aber es hat bei mir nicht funktioniert. Anstatt es zu debuggen, habe ich Folgendes getan:
1) Kopieren Sie die Kopfzeile der CSV-Datei in eine txt-Datei und bearbeiten Sie sie mit Emacs. Fügen Sie zwischen jedem Feld ein Komma und eine CR ein, um jedes in eine eigene Zeile zu setzen.
2) speichern , die Datei als fieldlist.txt
3) bearbeiten Sie die Datei defns für jedes Feld schließen ( die meisten waren varchar, aber nicht wenige waren int (x). In Tabelle erstellen Tabellennamen (zum Anfang der Datei und) auf dem Ende der Datei. Speichern Sie sie als CreateTable.sql.
4) Starten Sie den MySQL- Client mit Eingaben aus der Createtable.sql-Datei, um die Tabelle zu erstellen.
5) Starten Sie den MySQL-Client Name und CSV-Dateiname. Einfügen in die Datei FieldList.txt. Stellen Sie sicher, dass Sie die 'IGNORE 1 LINES' einfügen, bevor Sie sie in die Feldliste einfügen
Klingt nach viel Arbeit, ist aber mit Emacs einfach .....
quelle
Verwenden Sie die TablePlus-Anwendung: Klicken Sie im rechten Bereich mit der rechten Maustaste auf den Tabellennamen. Wählen Sie Importieren ...> Aus CSV. Wählen Sie CSV-Datei. Überprüfen Sie die Spaltenübereinstimmung und klicken Sie auf Alles importieren!
quelle
Ich habe Google-Suche viele Möglichkeiten, um CSV in MySQL zu importieren, "Daten infile laden", MySQL Workbench verwenden, etc.
Wenn ich die Importschaltfläche für MySQL-Workbench verwende, müssen Sie zuerst die leere Tabelle selbst erstellen und jeden Spaltentyp für sich selbst festlegen. Hinweis: Sie müssen am Ende eine ID-Spalte als Primärschlüssel hinzufügen und nicht null und auto_increment. Andernfalls wird die Importschaltfläche später nicht mehr angezeigt. Wenn ich jedoch mit dem Laden einer CSV-Datei beginne, scheint nichts geladen zu sein, was wie ein Fehler aussieht. Ich gebe auf.
Glücklicherweise ist der beste einfache Weg, den ich bisher gefunden habe, Oracle MySQL für Excel zu verwenden. Sie können es von hier herunterladen MySQL für Excel
Dies ist, was Sie tun werden: Öffnen Sie die CSV-Datei in Excel. Suchen Sie auf der Registerkarte Daten die Schaltfläche MySQL für Excel
Wählen Sie alle Daten aus und klicken Sie auf Nach MySQL exportieren. Hinweis zum Festlegen einer ID-Spalte als Primärschlüssel.
Wenn Sie fertig sind, gehen Sie zur MySQL-Workbench, um die Tabelle zu ändern. Der Währungstyp sollte für die reguläre Verwendung dezimal (19,4) für große Mengen dezimal (10,2) sein. Ein anderer Feldtyp kann auf varchar (255) gesetzt werden.
quelle