我目前正在成功地使用 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
其中 ID
和 date
是主键。
我有一个类似的 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。
最佳答案
只需将 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;
关于python - LOAD DATA INFILE REPLACE 使用特定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47170773/