2017-11-08 8 views
0

現在、LOAD DATA LOCAL INFILEを正常に使用しています。通常はREPLACEです。しかし、私は現在、同じコマンドを使用してCSVファイルをテーブルにロードしようとしていますが、特定のカラムだけを置き換えようとしています。例えば特定の列のLOAD DATA INFILE REPLACE

、テーブルには、現在のようになります。

IDdateは主キーです
ID date  num1 num2 
01 1/1/2017 100  200 
01 1/2/2017 101  201 
01 1/3/2017 102  202 

私は類似したCSVを持っていますが、カラムにはID, date, num1しかありません。私はその新しいCSVをテーブルにロードしたいが、何かを維持するにはnum2です。

this postあたりの私の現在のコード:私はすべての列を交換していたときに

LOAD DATA LOCAL INFILE mycsv.csv 
REPLACE INTO TABLE mytable 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(ID, date, num1) 

は再び、私のコードは完璧に動作しますが、私は唯一の選択列を交換しようとすると、それはNULL値を持つ他の列を埋めます。同様の投稿(私が参照したようなもの)は役に立たなかった。

これはPython固有の問題かどうかわかりませんが、MySQLdbを使用してデータベースに接続しています。私はlocal_infileパラメータに精通しています。 MySQLバージョン5.6.33。

答えて

0

は単に同様の構造一時テーブルにCSVテーブルをロードし、実行しますUPDATE JOIN

CREATE TABLE mytemptable AS SELECT * FROM mytable LIMIT 1;   --- RUN ONLY ONCE 

DELETE FROM mytemptable; 

LOAD DATA LOCAL INFILE mycsv.csv 
INTO TABLE mytemptable 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(ID, date, num1); 

UPDATE mytable t1 
INNER JOIN mytemptable t2 ON t1.ID = t2.ID AND t1.`date` = t2.`date` 
SET t1.num1 = t2.num1; 
関連する問題