检查csv文件中是否存在来自数据库的记录

时间:2018-04-25 07:52:21

标签: mysql database python-3.x csv database-design

今天我来找你灵感或想法如何用大量重复的代码解决任务而不是杀死我的笔记本电脑。

我有一个包含大约10k记录的CSV文件。我还有一个包含相应记录的数据库。我在这两个结构中都有四个字段:目的地 countryCode 前缀费用

每次使用此.csv文件更新数据库时,我都要检查具有给定目的地 countryCode 前缀的记录是否存在如果是这样,我必须更新费用。这很简单,工作正常。

但是这里有一个棘手的部分:目的地可能会从一个.csv文件中删除到另一个。我需要知道这一点,并从数据库中删除未使用的记录。处理这种情况的最有效方法是什么?

我真的不想用.csv文件中的每一行检查数据库中的每条记录:这听起来是个糟糕的主意。 我正在考虑一些time_stamp或者只是一个bool变量,它会告诉我在DB BUT的最后一次更新期间是否修改了记录:记录中的params也有可能发生变化,因此:无需触摸记录并将其标记为已修改。

对于该任务,我使用Python 3和mysql.connector lib。

任何想法和建议将不胜感激:)

2 个答案:

答案 0 :(得分:0)

如果您要保留时间戳,为什么即使记录中没有任何更改,您是否关心它是否已更新?如果原因是您要保存最新更新的日期,则可以添加另一列,保存上次记录在csv中出现的时间戳,并删除所有记录,其中此列的值较小而不是最后一次csv的日期。

答案 1 :(得分:0)

如果.CSV是现有表的替换

CREATE TABLE new LIKE real;
load the .csv into `new`  (Probably use LOAD DATA...)
RENAME TABLE real TO old, new TO real;
DROP TABLE old;

如果您有充分的理由保留旧表并对其进行修补,那么......

  1. 将.csv加载到表中
  2. 添加合适的索引
  3. 执行一个 SQL删除操作(不需要循环)。它可能是一个多表DELETE
  4. 执行一个 sql来更新价格(不需要循环)。它可能是一个多表UPDATE
  5. 你可以在不触及Python的情况下完成整个任务(无论哪种方式)。