Ich habe eine CSV-Datei, die 10 Spalten enthält. Ich möchte nur einige Spalten aus dieser Datei auswählen und sie mit dem LOAD DATA INFILE
Befehl in eine MySQL-Datenbank laden .
Ich habe eine CSV-Datei, die 10 Spalten enthält. Ich möchte nur einige Spalten aus dieser Datei auswählen und sie mit dem LOAD DATA INFILE
Befehl in eine MySQL-Datenbank laden .
Antworten:
Laden Sie Daten in eine Tabelle in MySQL und geben Sie Spalten an:
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;
@ col1,2,3,4 sind Variablen, die den Namen der CSV-Dateispalten enthalten (angenommen 4), ID sind Tabellenspalten.
for i in range(1,100): print("@column",i,",",end="",sep="")
LOAD DATA INFILE 'file.csv'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
Ersetzen Sie einfach die Spalte1, Spalte2 usw. durch Ihre Spaltennamen und setzen Sie @dummy an eine Stelle, an der sich eine Spalte in der CSV befindet, die Sie ignorieren möchten.
Alle Details hier .
(field,names)
kurz vor das Semikolon am Ende setzen, damit es funktioniert.
Geben Sie den Namen der Spalten in der CSV in der Anweisung load data infile an.
Der Code lautet wie folgt:
LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
Hier fügen Sie der Tabelle nur Daten zu zwei Spalten hinzu (Sie können sie mit dem Namen der Spalte auswählen).
Das einzige, worauf Sie achten müssen, ist, dass Sie eine CSV-Datei (Dateiname.csv) mit zwei Werten pro Zeile (Zeile) haben. Ansonsten bitte erwähnen. Ich habe eine andere Lösung.
Vielen Dank.
Beispiel:
Inhalt der ae.csv-Datei:
"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"
CREATE TABLE Tabletmp (
rec VARCHAR(9)
);
Für nur Spalte 3 setzen:
LOAD DATA INFILE '/local/ae.csv'
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;
select * from Tabletmp;
2016
1982
1986
1400
Wenn Ihre Datenbanktabelle mehr Spalten enthält als mehr Spalten in Ihrer CSV, können Sie folgendermaßen vorgehen:
LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);
Für diejenigen, die folgenden Fehler haben:
Fehlercode: 1290. Der MySQL-Server wird mit der Option --secure-file-priv ausgeführt, sodass diese Anweisung nicht ausgeführt werden kann
Sie können diesen Befehl einfach ausführen, um zu sehen, aus welchem Ordner Dateien geladen werden können:
SHOW VARIABLES LIKE "secure_file_priv";
Danach müssen Sie die Dateien in diesen Ordner kopieren und die Abfrage mit LOAD DATA LOCAL INFILE
statt ausführen LOAD DATA INFILE
.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
.