मैं खुद को हर हफ्ते एक या अधिक नई चीजें सीखता हुआ पाता हूं, कम से कम अपने व्यक्तिगत अनुभव के नजरिए से। इसलिए, मैंने सोचा कि इसे यहां साझा करना उस ज्ञान में से कुछ को ठोस बनाने, इसका रिकॉर्ड रखने और संभावित रूप से किसी और को कुछ सीखने में मदद करने का एक अच्छा तरीका होगा जो वे पहले नहीं जानते थे।
इस सप्ताह मुझे पता चला कि एक पायथन स्क्रिप्ट लिखना संभव है जो डेटाबेस बैकअप नामों की एक सूची ले सकता है, डेटाबेस को MySQL में आयात कर सकता है, फिर एक फ्लास्क संदर्भ शुरू कर सकता है, और डेटाबेस पर एक रिपोर्ट चला सकता है, और फिर धोएँ और दोहराएँ।
शायद यह एक सरल अवधारणा की तरह लगती है लेकिन ज्यादातर मानक दृष्टिकोण का उपयोग करके इसे हासिल करने की कोशिश करना भ्रामक रूप से चुनौतीपूर्ण साबित हुआ। मैंने बस एक स्क्रिप्ट लिखकर शुरुआत की जो बैकअप आयात करती थी, फिर आयातित डेटा पर रिपोर्ट चलाती थी, और उसे एक लूप में डाल देती थी। लेकिन दुख की बात है कि मेरी मुलाकात एक ऐसे टर्मिनल से हुई जो दूसरे लूप पुनरावृत्ति पर लटका हुआ था, और इसलिए मैंने यह समझना शुरू कर दिया कि क्या हो सकता है।
पहला विचार जो मन में आया वह यह था कि फ्लास्क ऐप से जो आयात मैं कर रहा था, उसके कारण आयात अवरुद्ध हो रहा था क्योंकि स्क्रिप्ट अभी तक समाप्त नहीं हुई है, इसलिए फ्लास्क के साथ डेटाबेस कनेक्शन रखने वाला लॉक अभी भी सक्रिय था , लेकिन मुझे सूचित करने के लिए कोई त्रुटि संदेश नहीं था कि ऐसा हो रहा था, और मुझे लगता है कि यह डिज़ाइन द्वारा है, इसलिए मैंने फ्लास्क के साथ अपने अनुभव का उपयोग यह तर्कसंगत बनाने के लिए किया कि यह संभवतः मामला था।
इसलिए, मैंने जाकर खोजा कि जिन मॉड्यूल को मैंने फ्लास्क से आयात किया था, उन्हें कैसे 'अन-इम्पोर्ट' किया जाए और काम पूरा करने के लिए मुझे पायथन में डेल कीवर्ड मिला और फिर से प्रयास किया... केवल मुझे मिला वही लटकता हुआ टर्मिनल जिसके साथ मैं पहले बैठा था। तो, यह ड्राइंग बोर्ड पर वापस आ गया था।
मेरे मन में अगला विचार यह था कि हो सकता है कि मॉड्यूल हटा दिए गए हों, लेकिन फ्लास्क ऐप संदर्भ अभी भी कहीं चल रहा है। फ्लास्क ऐप संदर्भ को चलने और जहां मैं चाहता था उसे रोकने के लिए मजबूर करने के लिए, मैंने एक दृष्टिकोण की कोशिश की जिसे मैंने लगभग 2 साल पहले पिछले कार्य में उपयोग किया था जहां मुझे एसिंक्रोनस रूप से ईमेल भेजने के साथ फ्लास्क ऐप संदर्भ का उपयोग करने की आवश्यकता थी।
फिर मैंने ऐप को लूप के भीतर से आयात करने का प्रयास किया, फिर with ऐप.ऐप_कॉन्टेक्स्ट(): कमांड का उपयोग करके फ्लास्क को केवल इस निर्दिष्ट संदर्भ में शुरू करने और रोकने के लिए मजबूर किया। इसके बाद मैंने स्क्रिप्ट चलाई और सांस रोककर टर्मिनल को देखा और पहले लूप में डेटाबेस को आयात करने में लगभग एक मिनट का इंतजार किया, फिर यह पहले की तरह दूसरे लूप से शुरू हुआ और फिर सफलता मिली! दूसरा आयात काम कर गया, और मुझे अपेक्षित अगले चरण का आउटपुट मिला जो दर्शाता है कि रिपोर्ट पूरी हो चुकी है, जिसे मैंने आउटपुट फ़ाइल के विरुद्ध सत्यापित किया।
मैं अपने परिणामों से खुश था क्योंकि यह ऐसा कुछ नहीं था जो मैंने पहले किया था, इसलिए मुझे खुशी थी कि मैं इसका पता लगा सका और उम्मीद के मुताबिक काम कर सका।
आप सोच रहे होंगे कि मैं सबसे पहले ऐसा करने की कोशिश क्यों कर रहा था, और यह एक अच्छा सवाल है। मुझे एक ऐतिहासिक मासिक रिपोर्ट निकालने का काम सौंपा गया था, जिसके लिए ऐसे डेटा की आवश्यकता थी जो डेटाबेस बैकअप के अलावा कहीं भी सहेजा नहीं गया था, और जिसे वर्तमान लाइव डेटाबेस से इकट्ठा नहीं किया जा सकता था, इसलिए इस डेटा को खींचने के लिए मेरे पास केवल बैकअप थे। . इसी ने मुझे डेटाबेस आयात के साथ-साथ फ्लास्क संदर्भ को प्रबंधित करने के बारे में सीखने के लिए प्रेरित किया।
उन लोगों के लिए जो कोड पढ़ने में थोड़ा आनंद लेते हैं, मैंने अपनी स्क्रिप्ट को इस प्रकार संरचित किया है:
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