تحقق من وجود سجل من قاعدة البيانات في ملف csv

اليوم أتيت لك للإلهام أو ربما الأفكار حول كيفية حل مهمة لا تقتل جهاز الكمبيوتر المحمول الخاص بي مع رمز ضخم ومتكرر.

I have a CSV file with around 10k records. I also have a database with respective records in it. I have four fields inside both of these structures: destination, countryCode,prefix and cost

في كل مرة أقوم بتحديث قاعدة بيانات باستخدام ملف .csv هذا ، يجب أن أتحقق من وجود السجل مع الوجهة و countryCode و البادئة وإذا كان الأمر كذلك ، لا بد لي من تحديث التكلفة . هذا سهل جدا ويعمل بشكل جيد.

ولكن هنا يأتي الجزء الصعب: هناك احتمال أن يتم حذف وجهة من ملف .csv إلى آخر ، ويجب أن أكون على دراية بذلك وأن أحذف هذا السجل غير المستخدم من قاعدة البيانات. ما هي الطريقة الأكثر فعالية للتعامل مع هذا النوع من الموقف؟

أنا حقا لا أريد أن تحقق كل سجل من قاعدة البيانات مع كل صف في ملف .csv: يبدو وكأنه فكرة سيئة للغاية. كنت أفكر في بعض time_stamp أو مجرد متغير منطقي الذي سوف يقول لي إذا تم تعديل السجل خلال التحديث الأخير من DB BUT: هناك أيضا فرصة أن أي من المعلمات داخل السجل يتغير ، وبالتالي: لا حاجة للمس هذا سجل ووضع علامة عليه كمعدلة.

لهذه المهمة ، يمكنني استخدام Python 3 و mysql.connector lib.

أي الأفكار والمشورة سيكون موضع تقدير :)

0
رقم لديك فقط أي. نسخة من مارس الذي سيتكون وجهة أي. إسبانيا والإصدار من أبريل تم حذف هذه الوجهة (ولكن لا توجد معلومات حولها تم ذكرها بشكل صريح)
وأضاف المؤلف hikamare, مصدر
لا أفهم كيف تعرف أنه يتم حذف وجهة واحدة على ملف .csv. لديك خط في ملف CSV يخبرك أنه يجب حذف الخط؟
وأضاف المؤلف sandwood, مصدر
حسنًا ، يجب حذف أي إدخال غير موجود في ملف csv من قاعدة البيانات ، ويجب تحديث كل إدخال موجود في ملف csv في قاعدة البيانات. بالنسبة لي يبدو ذلك واضحًا جدًا ، تقوم أولاً بتحديث DB مع إدخالات ملف CSV. القيام بذلك إلحاقك في قائمة محلية كل الإدخالات التي تم تحديثها. من يمكنك حذف جميع الإدخالات التي لا تطابق تلك القائمة المحلية. هل فاتني شيء ؟
وأضاف المؤلف sandwood, مصدر

2 إجابة

إذا كنت تحتفظ بطابع زمني ، فلماذا تهتم إذا تم تحديثها حتى لو لم يتم تغيير أي شيء في السجل؟ إذا كان السبب هو أنك تريد حفظ تاريخ آخر تحديث ، يمكنك إضافة عمود آخر يقوم بحفظ طابع زمني لآخر مرة ظهر فيها السجل في csv و afterwords تحذف جميع السجلات التي تكون قيمة هذا العمود فيها أصغر من تاريخ csv الأخير.

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. do واحد SQL للقيام بالحذف (لا تحتاج إلى حلقة). من المحتمل أن يكون جدول متعدد DELETE .
  4. واحد sql لتحديث الأسعار (لا حاجة إلى حلقة). من المحتمل أن يكون متعدد الجداول UPDATE .

ربما يمكنك القيام بالمهمة بأكملها (في كلتا الحالتين) دون لمس بيثون.

0
وأضاف