10列のCSVファイルがあります。そのファイルからいくつかの列のみを選択し、LOAD DATA INFILE
コマンドを使用してそれらをMySQLデータベースにロードしたいと思います。
回答:
MySQLのテーブルにデータをロードし、列を指定します。
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は、csvファイルの列(4と仮定)を保持する変数です。name、idはテーブルの列です。
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';
column1、column2などを列名に置き換え、CSV内の無視する列がある場所に@dummyを配置するだけです。
詳細はこちら。
(field,names)
セミコロンを機能させるには、最後にセミコロンの直前を配置する必要があります。
load datainfileステートメントでCSVの列の名前を指定します。
コードは次のようになります。
LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
ここでは、テーブルの2つの列(列の名前で選択できます)にのみデータを追加します。
注意しなければならないのは、行(行)ごとに2つの値を持つCSVファイル(filename.csv)があることだけです。それ以外の場合は言及してください。別の解決策があります。
ありがとうございました。
例:
ae.csvファイルの内容:
"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)
);
列3のみを配置する場合:
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
データベーステーブルの列数がcsvの列数より多い場合は、次のように進めることができます。
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,...);
次のエラーがある場合:
エラーコード:1290。MySQLサーバーは--secure-file-privオプションを指定して実行されているため、このステートメントを実行できません。
このコマンドを実行するだけで、次の場所からファイルをロードできるフォルダーを確認できます。
SHOW VARIABLES LIKE "secure_file_priv";
その後、そのフォルダー内のファイルをコピーし、のLOAD DATA LOCAL INFILE
代わりにを使用してクエリを実行する必要がありますLOAD DATA INFILE
。
ERROR 1148 (42000): The used command is not allowed with this MySQL version
。