أجد نفسي كل أسبوع أتعلم شيئًا جديدًا أو أكثر، على الأقل من منظور تجربتي الشخصية. لذا، اعتقدت أن مشاركتها هنا ستكون طريقة جيدة لترسيخ بعض هذه المعرفة، والاحتفاظ بسجل لها، وربما مساعدة شخص آخر على تعلم شيء لم يعرفه من قبل.
تعلمت هذا الأسبوع أنه من الممكن كتابة برنامج نصي بلغة بايثون يمكنه أخذ قائمة بأسماء النسخ الاحتياطية لقاعدة البيانات، واستيراد قاعدة بيانات إلى MySQL، ثم بدء تشغيل سياق Flask، وتشغيل تقرير عن قاعدة البيانات كما هي، و ثم اشطفيه وكرري الأمر.
ربما يبدو هذا مفهومًا بسيطًا ولكن محاولة تحقيق ذلك باستخدام نهج قياسي في الغالب أثبت أنه يمثل تحديًا خادعًا. لقد بدأت ببساطة بكتابة برنامج نصي يقوم باستيراد النسخة الاحتياطية، ثم تشغيل التقرير على البيانات المستوردة ووضع ذلك في حلقة. لكن للأسف، لقد واجهت محطة معلقة عند تكرار الحلقة الثانية، ولذلك بدأت في تحليل ما قد يحدث.
أول ما يتبادر إلى ذهني هو أن عمليات الاستيراد التي كنت أقوم بها من تطبيق Flask كانت تتسبب في حظر الاستيراد نظرًا لأن البرنامج النصي لم يتم إنهاؤه بعد، لذلك كان القفل الذي يحمل اتصال قاعدة البيانات مع Flask لا يزال نشطًا ، ولكن لم تكن هناك رسالة خطأ لإبلاغي بحدوث هذا، وأفترض أن هذا حدث حسب التصميم، لذلك استخدمت تجربتي مع Flask لتبرير أن هذا هو الحال على الأرجح.
لذلك، ذهبت وبحثت عن كيفية "إلغاء استيراد" الوحدات التي استوردتها من Flask وعثرت على الكلمة الأساسية del في python لإنجاز المهمة وحاولت مرة أخرى... فقط لأقابل نفس محطة التعليق التي جلست معها سابقًا. لذا كان من العودة الى لوحة الرسم.
الفكرة التالية التي كانت لدي هي أنه ربما تمت إزالة الوحدات، لكن سياق تطبيق Flask لا يزال قيد التشغيل في مكان ما. لإجبار سياق تطبيق Flask على التشغيل والتوقف حيث أردت، جربت أسلوبًا كنت قد استخدمته في مهمة سابقة منذ حوالي عامين حيث كنت بحاجة إلى استخدام سياق تطبيق Flask لإرسال رسائل البريد الإلكتروني بشكل غير متزامن.
حاولت بعد ذلك استيراد التطبيق من داخل حلقة for، ثم استخدام الأمر with app.app_context(): لإجبار Flask على البدء والتوقف فقط ضمن هذا السياق المحدد. قمت بعد ذلك بتشغيل البرنامج النصي وشاهدت الجهاز بفارغ الصبر بينما انتظرت دقيقة أو نحو ذلك حتى استغرق استيراد قاعدة البيانات في الحلقة الأولى، ثم بدأت بالثانية كما فعلت من قبل، وبعد ذلك، نجحت! نجحت عملية الاستيراد الثانية، وحصلت على مخرجات الخطوة التالية المتوقعة التي تشير إلى أن التقرير قد اكتمل، والذي قمت بالتحقق منه مقابل ملف الإخراج.
لقد كنت سعيدًا بنتائجي لأن هذا لم يكن شيئًا قمت به من قبل، لذلك كنت سعيدًا لأنني تمكنت من اكتشافه وتشغيله كما هو متوقع.
ربما تتساءل لماذا كنت أحاول القيام بذلك في المقام الأول، وهذا سؤال جيد. لقد تم تكليفي بسحب تقرير شهري تاريخي يتطلب بيانات لم يتم حفظها في أي مكان آخر غير النسخ الاحتياطية لقاعدة البيانات، والتي لا يمكن جمعها من قاعدة البيانات المباشرة الحالية، لذلك لم يكن لدي سوى نسخ احتياطية للعمل عليها لسحب هذه البيانات . وهذا ما دفعني إلى التعرف على كيفية إدارة سياق Flask جنبًا إلى جنب مع عمليات استيراد قاعدة البيانات.
بالنسبة لأولئك الذين يستمتعون بقليل من قراءة التعليمات البرمجية، هذه هي الطريقة التي قمت بها بتنظيم البرنامج النصي الخاص بي:
import os # for running the database import command backup_name_list = [ "backup1", "backup2" ] for backup_name in backup_name_list: # do all necessary changes or checks on the db name here command = f"mysql -u db_user_name --password='SomePassword' db_nameوهذا كل شيء، هكذا تمكنت من سحب البيانات التاريخية من النسخ الاحتياطية لقاعدة البيانات فقط.
هذا محدد للغاية، وأنا أدرك ذلك، ولكن هذا أيضًا ليس برنامجًا تعليميًا، إنه مجرد منفذ لتجربتي التعليمية الشخصية، والتي أود مشاركتها هنا على أمل أن تصبح قراءة مثيرة للاهتمام أو نصيحة مفيدة لشخص ما، في مكان ما هناك.
إذا كنت قد وصلت إلى هذا الحد، أود أن أشكرك على القراءة، وآمل أن تنضم إلي في مشاركتي القادمة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3