簡體   English   中英

檢查csv文件中是否存在來自數據庫的記錄

[英]Check if a record from database exist in a csv file

今天,我是來找您的靈感或想法,是如何解決任務而不用大量重復的代碼殺死我的筆記本電腦。

我有一個大約有1萬條記錄的CSV文件。 我也有一個數據庫,里面有各自的記錄。 我在這兩種結構中都有四個字段: destinationcountryCodeprefixcost

每次使用此.csv文件更新數據庫時,都必須檢查具有給定目的地countryCode前綴的記錄是否存在,如果存在,則必須更新cost 這很容易,而且效果很好。

但是,這里出現了棘手的部分:有一種可能會將目標從一個.csv文件刪除到另一個目標,我需要意識到這一點,並從數據庫中刪除未使用的記錄。 處理這種情況的最有效方法是什么?

我真的不想檢查數據庫中的每條記錄以及.csv文件中的每一行:這聽起來像是一個非常糟糕的主意。 我在考慮一些time_stamp或只是一個bool變量,它將告訴我記錄是否在數據庫BUT的最后一次更新期間被修改:記錄中的任何參數也有可能沒有改變,因此:無需觸摸記錄並標記為已修改。

對於該任務,我使用Python 3和mysql.connector lib。

任何想法和建議,將不勝感激:)

如果要保留時間戳,即使記錄中沒有任何更改,為什么還要關心它是否已更新? 如果原因是要保存最新更新的日期,則可以添加另一列,以保存記錄在csv中出現的最后一次時間戳,而后記刪除所有該列中的值較小的記錄比最后一個csv的日期大。

如果.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就可以完成整個任務(無論哪種方式)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM