【问题标题】:Check if a record from database exist in a csv file检查数据库中的记录是否存在于 csv 文件中
【发布时间】:2018-04-25 07:52:21
【问题描述】:

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

我有一个包含大约 10k 条记录的 CSV 文件。我也有一个数据库,里面有各自的记录。我在这两个结构中都有四个字段:destinationcountryCodeprefixcost

每次我用这个 .csv 文件更新数据库时,我都必须检查给定 destinationcountryCodeprefix 的记录是否存在如果是这样,我必须更新成本。这很简单,而且效果很好。

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

我真的不想用 .csv 文件中的每一行检查数据库中的每条记录:这听起来是个非常糟糕的主意。 我在考虑一些 time_stamp 或只是一个 bool 变量,它会告诉我记录是否在 DB 的最后更新期间被修改但是:也有可能记录中的任何参数都没有改变,因此:不需要碰那个记录并标记为已修改。

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

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

【问题讨论】:

  • 我不明白您是如何知道 .csv 文件中的一个目的地已被删除的。您在 csv 文件中有一行告诉您必须删除该行?
  • 没有。你只有即。从三月开始的版本将包含一个目的地,即。西班牙和 4 月的版本中,此目的地已被删除(但没有明确给出有关它的信息)
  • 好的,所以基本上任何不在 csv 文件中的条目都必须从数据库中删除,csv 文件中的每个条目都必须在数据库中更新。对我来说,这听起来很明显;您首先使用 csv 文件的条目更新数据库。这样做会在本地列表中附加已更新的每个条目。您可以删除与该本地列表不匹配的所有条目。我错过了什么吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果 .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

    您可能无需接触 Python 就可以完成整个任务(无论哪种方式)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      相关资源
      最近更新 更多