382 Stimmen

Wie kann ich eine CSV-Datei in eine MySQL-Tabelle importieren?

Ich habe eine unnormalisierte Ereignis-Tagebuch-CSV von einem Kunden, die ich versuche, in eine MySQL-Tabelle zu laden, so dass ich in ein vernünftiges Format umgestalten kann. Ich habe eine Tabelle namens "CSVImport" erstellt, die für jede Spalte der CSV-Datei ein Feld enthält. Die CSV-Datei enthält 99 Spalten, so dass dies an sich schon eine schwierige Aufgabe war:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

Für die Tabelle gelten keine Einschränkungen, und alle Felder enthalten VARCHAR(256)-Werte, mit Ausnahme der Spalten, die Zählungen (dargestellt durch INT), Ja/Nein (dargestellt durch BIT), Preise (dargestellt durch DECIMAL) und Textauszüge (dargestellt durch TEXT) enthalten.

Ich habe versucht, Daten in die Datei zu laden:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

Der ganze Tisch ist gefüllt mit NULL .

Ich denke, das Problem liegt darin, dass die Textauszüge mehr als eine Zeile enthalten und MySQL die Datei so analysiert, als ob jede neue Zeile einer Datenbankzeile entsprechen würde. Ich kann die Datei ohne Probleme in OpenOffice laden.

Die Datei clientdata.csv enthält 2593 Zeilen und 570 Datensätze. Die erste Zeile enthält Spaltennamen. Ich glaube, sie ist durch Kommata getrennt, und der Text ist offensichtlich durch doppelte Anführungszeichen getrennt.

UPDATE :

Im Zweifelsfall lesen Sie das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Ich habe einige Informationen zu den LOAD DATA Anweisung, die OpenOffice schlau genug war, um daraus zu schließen, und jetzt lädt es die richtige Anzahl von Datensätzen:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Aber es gibt immer noch eine ganze Reihe von NULL Datensätze, und keine der geladenen Daten scheint sich an der richtigen Stelle zu befinden.

5voto

ruvim Punkte 6176

Eine andere Lösung ist die Verwendung von csvsql Werkzeug von amazing csvkit Suite.

Beispiel für die Verwendung:

csvsql --db mysql://$user:$password@localhost/$database --insert --tables $tablename  $file

Dieses Tool kann automatisch die Datentypen ableiten (Standardverhalten), eine Tabelle erstellen und die Daten in die erstellte Tabelle einfügen. --overwrite kann verwendet werden, um die Tabelle zu löschen, wenn sie bereits existiert. --insert Option - um die Tabelle aus der Datei zu füllen.

So installieren Sie die Suite

pip install csvkit

Voraussetzungen: python-dev , libmysqlclient-dev , MySQL-python

apt-get install python-dev libmysqlclient-dev
pip install MySQL-python

3voto

Michael Tomar Punkte 107

Ich weiß, dass meine Antwort spät kommt, aber ich möchte noch ein paar andere Möglichkeiten erwähnen, wie man es machen kann. Die einfachste ist die Verwendung der Kommandozeile. Die Schritte sind die folgenden:

  1. Greifen Sie auf die MySQL CLI zu, indem Sie den folgenden Befehl eingeben:

mysql -u mein_Benutzername -p

  1. Erstellen einer Tabelle in der Datenbank
use new_schema;

CREATE TABLE employee_details (
id INTEGER,
employee_name VARCHAR(100),
employee_age INTEGER,
PRIMARY KEY (id)
);
  1. Importieren der CSV-Datei in eine Tabelle. Wir können entweder den Dateipfad angeben oder die Datei im Standardverzeichnis des MySQL-Servers speichern.
LOAD DATA INFILE 'Path to the exported csv file'
INTO TABLE employee_details
FIELDS TERMINATED BY ','
IGNORE 1 ROWS;

Es ist die einzige von vielen Lösungen, ich habe sie in dieser Lehrgang Wenn das Laden von CSV-Dateien in die MySQL-Datenbank Ihre tägliche Aufgabe ist, dann ist es besser, diesen Prozess zu automatisieren. In diesem Fall können Sie einige Tools von Drittanbietern verwenden, mit denen Sie Daten nach einem Zeitplan laden können.

3voto

sivamani Punkte 325

Importieren von csv-Dateien in Sql-Tabellen

Beispiel-Datei: Overseas_trade_index Daten CSV-Datei

Schritte:

  1. Sie müssen eine Tabelle erstellen für overseas_trade_index .

  2. Sie müssen Spalten für eine csv-Datei erstellen.

    SQL-Abfrage:

    ( id int not null primary key auto_increment,
    series_reference varchar (60),
    period varchar (60),
    data_value decimal(60,0),
    status varchar (60),
    units varchar (60),
    magnitude int(60),
    subject text(60),
    group text(60),
    series_title_1 varchar (60),
    series_title_2 varchar (60),
    series_title_3 varchar (60),
    series_title_4 varchar (60),
    series_title_5 varchar (60),
     );
  3. Ich muss eine Verbindung zur mysql-Datenbank im Terminal herstellen.

    =>show databases;
    =>use database;
    =>show tables;
  4. Bitte geben Sie diesen Befehl ein, um die csv-Daten in mysql-Tabellen zu importieren.

    load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
  5. Diese Daten des Überseehandelsindex finden Sie auf sqldatabase:

    select * from trade_index;

3voto

Mehdi Punkte 677

Ich verwende mysql workbench, um dieselbe Aufgabe zu erledigen.

  1. neues Schema erstellen
  2. neu erstelltes Schema öffnen
  3. Klicken Sie mit der rechten Maustaste auf "Tabellen" und wählen Sie "Assistent für den Import von Tabellendaten".
  4. Geben Sie den Pfad der CSV-Datei und den Tabellennamen an und konfigurieren Sie schließlich den Spaltentyp, da der Assistent den Spaltentyp anhand der Werte vorgibt.

Hinweis: Schauen Sie sich die Protokolldatei von mysql workbench auf Fehler an, indem Sie "tail -f [mysqlworkbenchpath]/log/wb*.log" verwenden.

3voto

Georgy Gobozov Punkte 13427

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X