如何使用Python迭代MySQL表?

时间:2010-06-28 16:30:45

标签: python mysql csv iterator

我有一个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种方法:

  1. 将所有内容都插入到表中后,运行一个MySQL查询来执行迭代并自行替换所有内容。

  2. 一旦所有内容都插入到表中,运行MySQL查询将一些数据发送回Python,然后运行MySQL查询以更新正确的值。

  3. 在每次插入之前,在每个字段的基础上进行Python处理。

  4. 插入临时表并使用SQL插入主表。

  5. 我可能会弄清楚如何做#2,也许#3,但不知道如何做#1或#4,我认为这是最好的方法,因为它不需要对Python代码进行根本性的改变

    我的问题是A)上述哪种方法“最好”和“最干净”? (速度不是真正的问题。)和B)我将如何实现#1或#4?

    提前致谢:)

1 个答案:

答案 0 :(得分:2)

我认为你对#3选项的控制能力最强,工作量最少,特别是如果你想保持现有的值超过空值,我认为你有可能用#1覆盖那些。

如果速度不是问题,对于CSV中的每条记录,请将其与现有记录进行比较,并使用您的首选值更新或插入记录。