python - LOAD DATA INFILE REPLACE 使用特定的列

标签 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。

最佳答案

只需将 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/

相关文章:

mysql - 图像未上传到 Laravel 中的 MySQL 数据库

java.sql.SQLException : No value specified for parameter 5, 但字符串长度为 4,而不是 5

python - 为什么从 ggplot 生成的图没有显示出来?

python - background_task.py 不显示消息 - Python

python - 如何管理 python 线程结果?

php - 如何使用此php代码从wamp数据库访问mysql表?

python - 是什么导致了这个Python异常?

php - 阻止用户提交 24 小时,并显示阻止的时间

SQL:从 "nothing"中选择一个数字列表

mysql - 我们能否以通用/通用方式为所有使用 SQL 的数据库实现类似于 ROW_NUMBER() 的功能?