如何用Python遍历MySQL表?

1 投票
1 回答
948 浏览
提问于 2025-04-16 00:31

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

总的来说,我需要把这些空值转换成正确的值。我想到了四种方法:

  1. 在所有数据插入到表中后,运行一个MySQL查询,让它自己去遍历和替换。

  2. 在所有数据插入到表中后,运行一个MySQL查询,把一些数据发回给Python,处理完再运行一个MySQL查询来更新正确的值。

  3. 在每次插入之前,先在Python中逐个字段处理。

  4. 先插入到一个临时表中,然后用SQL把数据插入到主表。

我可能能搞定第2种和第3种方法,但对第1种和第4种方法没什么头绪,我觉得这两种方法最好,因为这样就不需要对Python代码做根本性的修改。

我的问题是A) 上面哪种方法是“最好”和“最干净”的?(速度不是主要问题。)B) 我该如何实现第1种或第4种方法?

提前谢谢你们 :)

1 个回答

2

我觉得你选择的第三个选项会让你掌控得最好,而且工作量最少。特别是如果你想保留已有的值而不是用空值替代的话,我觉得用第一个选项可能会有风险,因为那样可能会把已有的值覆盖掉。

如果速度不是问题的话,你可以对每一条CSV记录进行比较,看看它和现有记录有什么不同,然后用你想要的值来更新或者插入记录。

撰写回答