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

rhfm7lfc  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(537)

今天我来给你们一些灵感或者想法,如何解决一个任务,而不是用大量重复的代码杀死我的笔记本电脑。
我有一个csv文件,有大约10k条记录。我还有一个数据库,里面有各自的记录。我在这两个结构中都有四个字段:destination、countrycode、prefix和cost
每次我用这个.csv文件更新一个数据库时,我都要检查带有给定目的地、国家代码和前缀的记录是否存在,如果存在,我就要更新成本。这很简单,而且效果很好。
但这里有一个棘手的部分:有一种可能,目的地可能会从一个.csv文件删除到另一个,我需要知道这一点,并删除数据库中未使用的记录。处理这种情况最有效的方法是什么?
我真的不想用.csv文件中的每一行检查数据库中的每一条记录:这听起来是个非常糟糕的主意。我在考虑某个时间戳或一个bool变量,它会告诉我在db的最后一次更新期间记录是否被修改,但是:记录中的两个参数也有可能没有更改,因此:不需要触摸该记录并将其标记为已修改。
对于该任务,我使用python3和mysql.connector lib。
如有任何想法和建议,我们将不胜感激:)

u59ebvdq

u59ebvdq1#

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

如果你有充分的理由保留旧表并修补它,那么。。。
将.csv加载到表中
添加合适的索引
执行一个sql来执行删除(不需要循环)。可能是一张多桌的 DELETE .
执行一个sql来更新价格(不需要循环)。可能是一张多桌的 UPDATE .
您可能不用接触python就可以完成整个任务(无论哪种方式)。

r3i60tvu

r3i60tvu2#

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

相关问题