我有一个Python脚本,它使用MySQLdb接口将各种CSV文件加载到MySQL表中。
在我的代码中,我使用Python的标准CSV库来读取CSV,然后使用INSERT
查询将每个字段一次插入表中。我这样做而不是使用LOAD DATA
,以便我可以在每个字段的基础上转换空值和其他次要清理。
示例表格格式:
`id_number` | `iteration` | `date` | `value`
102 | 1 | 2010-01-01 | 63
102 | 2 | 2010-01-02 | NULL
102 | 3 | 2010-01-03 | 65
id_number = 102
的第二次迭代中的空值表示value
与前一天相比没有变化的情况,即value
仍为63.
基本上,我需要将这些空值转换为正确的值。我可以想象4种方法:
将所有内容都插入到表中后,运行一个MySQL查询来执行迭代并自行替换所有内容。
一旦所有内容都插入到表中,运行MySQL查询将一些数据发送回Python,然后运行MySQL查询以更新正确的值。
在每次插入之前,在每个字段的基础上进行Python处理。
插入临时表并使用SQL插入主表。
我可能会弄清楚如何做#2,也许#3,但不知道如何做#1或#4,我认为这是最好的方法,因为它不需要对Python代码进行根本性的改变
我的问题是A)上述哪种方法“最好”和“最干净”? (速度不是真正的问题。)和B)我将如何实现#1或#4?
提前致谢:)
答案 0 :(得分:2)
我认为你对#3选项的控制能力最强,工作量最少,特别是如果你想保持现有的值超过空值,我认为你有可能用#1覆盖那些。
如果速度不是问题,对于CSV中的每条记录,请将其与现有记录进行比较,并使用您的首选值更新或插入记录。