使用特定列

时间:2017-11-08 02:47:24

标签: python mysql sql database csv

我目前正在成功使用LOAD DATA LOCAL INFILE,通常使用REPLACE。但是,我现在尝试使用相同的命令将CSV文件加载到表中,但只替换特定的列。

例如,表格目前如下:

ID    date        num1    num2
01    1/1/2017    100     200
01    1/2/2017    101     201
01    1/3/2017    102     202

其中IDdate是主键。

我有一个类似的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。

1 个答案:

答案 0 :(得分: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;