Database
 sql >> डेटाबेस >  >> RDS >> Database

शुरुआती के लिए SQL एक्सप्रेस के साथ पायथन डेटाबेस प्रोग्रामिंग

पिछले 5 वर्षों में पायथन की लोकप्रियता तेजी से बढ़ी है। अन्य प्रोग्रामिंग भाषाओं के सापेक्ष इसके कोमल सीखने की अवस्था के कारण कई नए प्रोग्रामर इसकी ओर आकर्षित होते हैं। इसकी एक्स्टेंसिबिलिटी और पावर के कारण अनुभवी प्रोग्रामर इसकी ओर आकर्षित होते हैं। हालाँकि इस बड़े पैमाने पर गोद लेने के प्रमुख ड्राइवरों में से एक वह सहजता है जिससे पायथन डेटाबेस के साथ काम कर सकता है। यह पायथन प्रोग्रामिंग ट्यूटोरियल यह पता लगाएगा कि पायथन 3 का उपयोग करके एसक्यूएल एक्सप्रेस के साथ संवाद करने के लिए पायथन का उपयोग कैसे शुरू किया जाए।

पायथन और डेटाबेस प्रोग्रामिंग

एक पायथन नौसिखिया जो डेटाबेस कार्यक्षमता को किसी भी . में एकीकृत करना चाहता है सॉफ्टवेयर प्रोजेक्ट किसी भी . में लिखा गया है भाषा में कम से कम दो . की बुनियादी समझ होनी चाहिए भाषाएं। पहला, निश्चित रूप से, पायथन और दूसरा डेटाबेस द्वारा उपयोग की जाने वाली विशिष्ट संरचित क्वेरी भाषा (एसक्यूएल) है। जबकि SQL को मानकीकृत किया गया है, व्यवहार में यह एक सार्वभौमिक भाषा नहीं है, लेकिन विभिन्न डेटाबेस के बीच कार्यान्वयन इतना करीब है कि एक डेटाबेस से दूसरे डेटाबेस में जाना इतना चुनौती नहीं है, जब किसी के पास डेटाबेस अनुप्रयोग विकास अनुभव का एक आरामदायक स्तर हो।

डेटाबेस के लिए एक और महत्वपूर्ण विचार यह है कि उन सभी को प्रबंधन सॉफ्टवेयर की आवश्यकता होती है। ये प्रबंधन उपकरण डेटाबेस तक पहुंच और सुरक्षा विशेषाधिकार स्थापित करने में सहायता कर सकते हैं। इनका उपयोग डेटाबेस अनुप्रयोगों को डिबग करने के लिए भी किया जा सकता है क्योंकि वे एक डेवलपर को इस तरह के काम करने में सक्षम कर सकते हैं:

  • तालिकाओं, विचारों और अन्य डेटाबेस वस्तुओं की सामग्री का निर्माण और प्रबंधन। इसमें तालिकाओं के बीच संबंध, साथ ही अखंडता नियमों का विन्यास शामिल है।
  • डेटाबेस के साथ सीधे SQL कोड प्रविष्टि के माध्यम से सहभागिता।
  • एसक्यूएल सिंटैक्स की डिबगिंग।
  • एप्लिकेशन में गलत तरीके से कोड किए गए SQL स्टेटमेंट के कारण हुए नुकसान को (एक हद तक) पूर्ववत करना।

भले ही कोई डेवलपर मोंगोडीबी जैसे नोएसक्यूएल-आधारित डेटाबेस का उपयोग करना चुनता है, फिर भी इस तरह के समाधान को काम करने के लिए आवश्यक डेटाबेस-विशिष्ट कोडिंग सिंटैक्स सीखने में चुनौतियां होंगी। बेशक, ये निवारक नहीं हैं, ये केवल तकनीकी कारक हैं जिन पर किसी भी सॉफ्टवेयर विकास परियोजना के साथ विचार किया जाना चाहिए।

पायथन और डेटाबेस ड्राइवर

पायथन, किसी भी अन्य प्रोग्रामिंग भाषा की तरह, किसी दिए गए डेटाबेस के साथ मूल रूप से संचार नहीं कर सकता है। इसे एक विशिष्ट डेटाबेस सर्वर के लिए अतिरिक्त मॉड्यूल जोड़ने की आवश्यकता है। सर्वोत्तम अभ्यास दृष्टिकोण से, डेटाबेस ड्राइवर मॉड्यूल का उपयोग करना सबसे अच्छा है जो सॉफ़्टवेयर प्रोजेक्ट के लिए चुने गए डेटाबेस सर्वर के लिए विशिष्ट है। ऐसा करने से यह सुनिश्चित होता है कि पायथन डेटाबेस सर्वर की सभी सुविधाओं तक पहुँच प्राप्त कर सकता है, भले ही यह मॉड्यूल के लिए एक विशिष्ट प्रोग्रामिंग सिंटैक्स का उपयोग करने की अतिरिक्त लागत पर आता हो। जबकि "सार्वभौमिक" डेटाबेस ड्राइवर मॉड्यूल बनाने के लिए कुछ प्रयास किए गए हैं जो कई डेटाबेस सर्वर से जुड़ सकते हैं, ये अक्सर किसी विशेष डेटाबेस सर्वर की कुछ विशेषताओं तक पहुंच खोने की कीमत पर आते हैं।

एसक्यूएल एक्सप्रेस क्या है?

SQL सर्वर दशकों से विंडोज के लिए गो-टू डेटाबेस सर्वर समाधान रहा है। हालांकि यह एक मुफ्त डेटाबेस सर्वर समाधान से जितना दूर हो सकता है, माइक्रोसॉफ्ट एसक्यूएल एक्सप्रेस नामक एसक्यूएल सर्वर का शून्य-लागत, स्ट्रिप-डाउन संस्करण प्रदान करता है। SQL एक्सप्रेस शुरुआती लोगों के लिए एक आदर्श शिक्षण उपकरण है क्योंकि यह उसी SQL सिंटैक्स का समर्थन करता है जो SQL सर्वर उपयोग करता है। SQL एक्सप्रेस और SQL सर्वर दोनों "Transact-SQL" नामक SQL के एक कस्टम एक्सटेंशन का उपयोग करते हैं, जिसे "T-SQL" भी कहा जाता है। SQL एक्सप्रेस और SQL सर्वर दोनों ही एक्सेस प्रबंधन के लिए Windows उपयोगकर्ता खातों और पारंपरिक उपयोगकर्ता नाम और पासवर्ड सिस्टम के उपयोग का समर्थन करते हैं।

पायथन PyODBC . नामक मॉड्यूल के साथ SQL एक्सप्रेस या SQL सर्वर के साथ संचार करता है . एसक्यूएल सर्वर और एसक्यूएल एक्सप्रेस दोनों को "एसक्यूएल सर्वर मैनेजमेंट सिस्टम" नामक एक अलग, शून्य-लागत विंडोज एप्लिकेशन द्वारा प्रबंधित किया जाता है, जिसे "एसएसएमएस" के नाम से जाना जाता है। इस लेखन के समय, SQL एक्सप्रेस और SSMS दोनों ही Microsoft से अलग-अलग डाउनलोड हैं:

  • एसएसएमएस डाउनलोड करें
  • एसक्यूएल एक्सप्रेस डाउनलोड

पायथन विकास के लिए SQL एक्सप्रेस को कैसे कॉन्फ़िगर करें

SQL एक्सप्रेस, SQL सर्वर की तरह, दो प्रकार के प्रमाणीकरण का समर्थन करता है। पहला उपयोगकर्ता के विंडोज उपयोगकर्ता खाते पर आधारित प्रमाणीकरण है, जिसे "विश्वसनीय कनेक्शन" के रूप में भी जाना जाता है। दूसरा पारंपरिक उपयोगकर्ता नाम और पासवर्ड-आधारित प्रमाणीकरण है जिसे "मिश्रित मोड प्रमाणीकरण" कहा जाता है। मिश्रित मोड प्रमाणीकरण विंडोज उपयोगकर्ता खाता-आधारित प्रमाणीकरण और उपयोगकर्ता नाम और पासवर्ड-आधारित प्रमाणीकरण दोनों का समर्थन करता है। SQL सर्वर या SQL एक्सप्रेस में उपयोगकर्ता नाम और पासवर्ड-आधारित प्रमाणीकरण का समर्थन करने का कोई तरीका नहीं है।

Microsoft मिश्रित मोड प्रमाणीकरण से दूर जा रहा है, क्योंकि विश्वसनीय कनेक्शन का उपयोग करने के प्रमुख लाभों में से एक यह है कि डेटाबेस क्रेडेंशियल्स को एप्लिकेशन कोड में संग्रहीत करने की आवश्यकता नहीं होती है। इस लेख में प्रदर्शन भी इसका उपयोग नहीं करेगा।

कनेक्शन स्ट्रिंग पोस्ट-इंस्टॉल कॉपी नहीं करना

शुरुआती स्तर के एप्लिकेशन डेवलपर्स के लिए विवाद का एक बिंदु SQL सर्वर कनेक्शन स्ट्रिंग्स के आसपास का प्रारंभिक भ्रम है। यदि कोई SQL एक्सप्रेस इंस्टॉल कर रहा है, तो इंस्टॉलेशन प्रोग्राम पोस्ट-इंस्टॉल किए गए SQL एक्सप्रेस इंस्टेंस के लिए कनेक्शन स्ट्रिंग प्रदान करता है। दुर्भाग्य से, प्रदान की गई कनेक्शन स्ट्रिंग संभवतः PyODBC . के साथ काम नहीं करेगी . हालांकि इस "फ्रीबी" के साथ सुरक्षा की भावना में "लुला" होना आकर्षक है, लेकिन यह इसके लायक होने की तुलना में अधिक परेशानी पैदा करने वाला है।

चित्र 1 - SQL एक्सप्रेस इंस्टालर से कनेक्शन स्ट्रिंग प्राप्त करना

ध्यान दें कि, इस लेखन के समय, SQL एक्सप्रेस के इंस्टॉलेशन प्रोग्राम में SSMS इंस्टॉलेशन प्रोग्राम को डाउनलोड करने के लिए एक लिंक भी शामिल है।

SQL एक्सप्रेस में डेटाबेस कैसे बनाएं

एक बार SQL एक्सप्रेस और SSMS दोनों स्थापित हो जाने के बाद, उपयुक्त एक्सेस प्रतिबंधों के साथ एक मूल डेटाबेस बनाने का समय आ गया है। SSMS प्रारंभ करने का सबसे आसान तरीका प्रारंभ . पर क्लिक करना है विंडोज में बटन, सर्च बार में "ssms" टाइप करें, ऊपर दाईं ओर "Microsoft SQL Server Management Studio 18" के दिखाई देने की प्रतीक्षा करें, और फिर ओपन पर क्लिक करें। प्रारंभ मेनू पैनल के दाईं ओर लिंक:

चित्र 2 - SSMS प्रारंभ करना

SSMS शुरू करने पर, निम्नलिखित डायलॉग बॉक्स द्वारा बधाई दी जाती है:

चित्र 3 - SSMS उद्घाटन संवाद

विंडोज प्रमाणीकरण के साथ, किसी भी क्रेडेंशियल दर्ज करने की आवश्यकता नहीं है। Windows उपयोगकर्ता खाता जिसके तहत SQL एक्सप्रेस स्थापित किया गया था, उसके पास SQL ​​​​एक्सप्रेस उदाहरण के लिए प्रशासनिक विशेषाधिकार हैं। बस कनेक्ट click क्लिक करें आगे बढ़ने के लिए।

SSMS एप्लिकेशन विंडो के सबसे बाईं ओर , वहाँ होगा ऑब्जेक्ट एक्सप्लोरर . नया डेटाबेस बनाने के लिए, डेटाबेस . पर राइट क्लिक करें और डेटाबेस बनाएं select चुनें संदर्भ . से मेनू:

चित्र 4 - एक नया डेटाबेस बनाना - 2 का भाग 1

नया डेटाबेस... . क्लिक करना एक नई डायलॉग विंडो खुलेगी जो नए डेटाबेस के विवरण दर्ज करने की अनुमति देती है। इस प्रदर्शन के लिए, डेटाबेस को RazorDemo . कहा जाएगा , सी # में रेजर-आधारित अनुप्रयोगों को विकसित करने के बारे में पिछले लेख में एक कमबैक के रूप में। डेटाबेस का नाम डेटाबेस नाम . के आगे टेक्स्ट बॉक्स में दर्ज करें और फिर ठीक . क्लिक करें संवाद विंडो के नीचे बटन। ध्यान दें कि, नीचे दिए गए उदाहरण में, तार्किक नाम . के लिए कॉलम फाइलों को थोड़ा चौड़ा किया गया ताकि पूर्ण तार्किक नाम बनाई जा रही डेटाबेस फ़ाइलों का खुलासा किया गया:

चित्र 5 - एक नया डेटाबेस बनाना - 2 का भाग 2

नया डेटाबेस तब ऑब्जेक्ट एक्सप्लोरर . में दिखाई देगा डेटाबेस . के अंतर्गत फ़ोल्डर:

चित्र 6 - नव निर्मित "रेजरडेमो" डेटाबेस

एसक्यूएल एक्सप्रेस में टेबल कैसे बनाएं

डेटा को स्टोर करने के लिए तालिकाओं के बिना एक रिलेशनल डेटाबेस वास्तव में उपयोगी नहीं है, और उन तालिकाओं को बनाने का सबसे सीधा तरीका SQL कोड का उपयोग करना है। ध्यान दें, जबकि कोई तालिका निर्माण विज़ार्ड का उपयोग कर सकता है तालिका बनाने के लिए, SQL कोड का उपयोग करना तेज़, आसान और कहीं अधिक सीधा है। RazorDemo . पर राइट-क्लिक करके प्रारंभ करें डेटाबेस प्रविष्टि, फिर नई क्वेरी . पर बायाँ-क्लिक करें संदर्भ विंडो में विकल्प:

चित्र 7 - एक नई क्वेरी विंडो खोलना

नीचे दिए गए के समान एक क्वेरी संपादक विंडो ऑब्जेक्ट एक्सप्लोरर . के दाईं ओर दिखाई देगी :

चित्र 8 - क्वेरी संपादक विंडो

तालिका निर्माण कोड नीचे दी गई सूची में दिखाया गया है:

रेज़रडेमो का उपयोग करें; # नीचे दिए गए महत्वपूर्ण नोट देखें तालिका कलाकार बनाएं (rcdid int null पहचान प्राथमिक कुंजी, artist_name varchar (अधिकतम)); टेबल एल्बम बनाएं (rcdid int null पहचान प्राथमिक कुंजी नहीं, artist_id int null संदर्भ नहीं कलाकार (rcdid) हटाएं कैस्केड पर, एल्बम_नाम वर्कर (अधिकतम)); लिस्टिंग 1 - टेबल क्रिएशन SQL कोड

ध्यान दें, क्वेरी संपादक विंडो बनाते समय डेटाबेस से आमतौर पर गारंटी दी जाती है कि चयनित डेटाबेस वही होगा जिसके खिलाफ कोड निष्पादित किया गया है, हमेशा स्पष्ट रूप से उपयोग करना एक अच्छा विचार है कोड की शुरुआत में इच्छित डेटाबेस। उपयोग कमांड स्पष्ट रूप से उस डेटाबेस के नाम का चयन करता है जो उसका अनुसरण करता है।

F5 दबाकर या निष्पादित करें . क्लिक करें बटन RazorDemo . के खिलाफ बयानों को निष्पादित करेगा डेटाबेस। यदि निष्पादन सफल होता है, तो ऐसा संकेत करने वाला एक संदेश “संदेश . में दिखाई देगा नीचे दिया गया बॉक्स:

चित्र 9 - सफल तालिका निर्माण

नव निर्मित टेबल और उनके कॉलम ऑब्जेक्ट एक्सप्लोरर . में देखे जा सकते हैं भी। ध्यान दें कि कभी-कभी ताज़ा करें डेटाबेस के भीतर नई वस्तुओं को दिखाने के लिए डेटाबेस पर राइट-क्लिक करने पर दिखाई देने वाले संदर्भ मेनू से विकल्प का चयन करने की आवश्यकता हो सकती है:

चित्र 10 - ऑब्जेक्ट एक्सप्लोरर को रिफ्रेश करना


चित्र 11 - नई तालिकाएं और उनके स्तंभ

इस समय, SSMS को सुरक्षित रूप से बंद किया जा सकता है।

ध्यान दें कि SSMS किसी भी SQL सर्वर डेटाबेस के साथ भी उसी तरह काम करता है। सभी तालिका निर्माण कोड को सहेजना हमेशा सबसे अच्छा अभ्यास है, चाहे किसी भी डेटाबेस सर्वर का उपयोग किया जा रहा हो। भले ही SQL सर्वर और SQL ऐसी स्क्रिप्ट की पुनर्प्राप्ति की अनुमति देते हैं, वे दोनों ऐसे कथनों पर भी एन्क्रिप्शन के उपयोग की अनुमति देते हैं, और उन मामलों में, कोड को पुनर्प्राप्त नहीं किया जा सकता है।

पायथन और एसक्यूएल एक्सप्रेस

आम तौर पर, SQL सर्वर सुरक्षा के बारे में यहां चर्चा की आवश्यकता होगी, लेकिन चूंकि विश्वसनीय कनेक्शन का उपयोग तब तक किया जाएगा, जब तक कि पायथन कोड को निष्पादित करने वाली चल रही प्रक्रिया का स्वामित्व Windows उपयोगकर्ता . के पास है जिसके पास पहले से ही एक्सेस किए जा रहे डेटाबेस तक पहुंच है, उस चर्चा की आवश्यकता नहीं होगी। ध्यान रखें कि SQL सर्वर और SQL एक्सप्रेस दोनों ही बहुत मजबूत सुरक्षा-संबंधी अनुकूलन प्रदान करते हैं, लेकिन वे शुरुआती लोगों के लिए लक्षित लेख के दायरे से बाहर हैं।

ध्यान दें, उत्पादन वातावरण में चल रहे किसी भी एप्लिकेशन के लिए उचित डेटाबेस सुरक्षा पर ध्यान न दें! सुनिश्चित करें कि उपयोगकर्ता खाते को केवल कम से कम संभव विशेषाधिकार दिए गए हैं जो एक प्रक्षेपण वातावरण में एक डेटाबेस तक पहुंचेंगे।

इन कोड उदाहरणों के लिए उपयोग किए गए पायथन का संस्करण 3.10 है, और इसे विंडोज़ में माइक्रोसॉफ्ट स्टोर के माध्यम से स्थापित किया गया था। इस विधि के साथ पायथन को स्थापित करने से सिस्टम पथ में पायथन और PIP3 निष्पादन योग्य जुड़ जाएंगे, जिससे इन कमांड के पूर्ण पथों को कमांड प्रॉम्प्ट में टाइप करने की आवश्यकता नहीं होगी। खिड़कियाँ। कोड प्रविष्टि के लिए, एक अच्छा, शून्य-लागत वाला टेक्स्ट एडिटर Notepad++ है।

कमांड प्रॉम्प्ट विंडोज़ खोलना

पायथन कोड का निष्पादन कमांड प्रॉम्प्ट . के माध्यम से सबसे अच्छा किया जाता है . कमांड प्रॉम्प्ट तक पहुंचने के लिए , प्रारंभ . क्लिक करें विंडोज़ में बटन और cmd . दर्ज करें खोज पट्टी में। कमांड प्रॉम्प्ट की प्रतीक्षा करें प्रकट होने के लिए और फिर खोलें . क्लिक करें प्रारंभ मेनू . के दाईं ओर लिंक करें :

चित्र 12 - कमांड प्रॉम्प्ट खोलना

एक सामान्य कमांड प्रॉम्प्ट विंडो इस तरह दिखती है:

चित्र 13 - एक विशिष्ट कमांड प्रॉम्प्ट

पीओओडीबीसी कैसे स्थापित करें

पीओओडीबीसी पायथन मॉड्यूल है जो पायथन को SQL सर्वर और SQL एक्सप्रेस दोनों तक पहुँचने में सक्षम बनाता है। माइक्रोसॉफ्ट स्टोर के माध्यम से पायथन की स्थापना पर, PyODBC कमांड के माध्यम से पायथन में जोड़ा जा सकता है:

pip3 pyodbc इंस्टॉल करें

चित्र 14 - PyODBC की सफल स्थापना

ध्यान दें, यदि Python के कई संस्करण स्थापित हैं, उदाहरण के लिए Python 2 और Python 3, तो pip3 को उपसर्ग करना आवश्यक हो सकता है पायथन के उपयुक्त संस्करण के लिए कमांड करने के लिए पूर्ण विन्डोज़ पथ के साथ कमांड।

यह भी ध्यान दें कि यदि केवल पायथन 3 स्थापित है, तो pip3 कमांड का उपयोग अभी भी अधिक सामान्य pip . पर किया जाना चाहिए आदेश, क्योंकि यह उचित परंपरा है।

पायथन कोड लिखना

अब जबकि डेटाबेस कॉन्फ़िगर किया गया है और PyODBC स्थापित हैं, डेटाबेस को पॉप्युलेट किया जा सकता है। एक डेटाबेस के मामले में जो कलाकारों और एल्बमों को सूचीबद्ध करता है, कुछ बेतरतीब ढंग से उत्पन्न बैंड नाम और एल्बम पर्याप्त होंगे। डेटाबेस से कनेक्ट करने के लिए पायथन कोड भी शामिल है, लेकिन इंसर्ट (अभी तक) नहीं हैं:

# bad-band-name-maker.pyimport sysimport randomimport pyodbcpart1 =["द", "अनकूक्ड", "अपीलिंग", "लार्जर देन लाइफ", "ड्रोपिंग", "अनवेल", "एट्रोसियस", "ग्लॉसी" ", "बैराज", "गैरकानूनी"] part2 =["पराजित", "हाई-फाई", "एक्सट्राटेरेस्ट्रियल", "एडम्ब्रेशन", "लिम्पिड", "लूप्टिड", "क्रॉमुलेंट", "अनसेटल्ड", "सूट" , "ट्विंकल"] part3 =["ब्रेन", "सेगमेंट", "ऑडियो", "वैध व्यवसाय", "मानसिकता", "ध्वनि", "कैंटिकल", "मानसून", "संरक्षित", "Hangout"] part4 =["कौगर", "शेर", "लिंक्स", "ओसेलॉट", "प्यूमा", "जगुआर", "पैंथर"] part5 =["चारा", "एर्सत्ज़ गुड्स", "लेफ्टओवर", "शिशु सूत्र" , "Mush", "Smoothie", "Milkshakes"]def main(argv):# RazorDemo डेटाबेस से कनेक्ट करें। conn =pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=localhost\SQLEXPRESS;Database=RazorDemo;Trusted_Connection=yes;") # 15 खराब बैंड नाम जेनरेट करें:x रेंज में (1, 16) के लिए :Rand1 =random.randrange(0, 9) rand2 =random.randrange(0, 9) rand3 =random.randrange(0, 9) badName =part1[rand1] + '' '+ part2[rand2] + ''' + part3 [rand3] प्रिंट ("बैंड नाम [" + str(x) + "] is [" + badName + "]") रेंज में y के लिए(1, 3):rand4 =random.randrange(0, len(part4) ) rand5 =random.randrange(0, len(part5)) albumName =part4[rand4] + "" + part5[rand5] Print ("\tAlbum [" + albumName + "]") # कनेक्शन बंद करें conn.close( ) वापसी 0if __name__ =="__main__":main(sys.argv[1:])लिस्टिंग 2 - कुछ डेटा बनाना

यह निम्न आउटपुट देता है:

चित्र 15 - बेतरतीब ढंग से उत्पन्न बैंड नाम

सीडी . के उपयोग पर ध्यान दें निर्देशिका में बदलने के लिए आदेश जहां पायथन कोड सहेजा गया है। पीओओडीबीसी कनेक्ट () यदि वर्तमान में लॉग-इन Windows उपयोगकर्ता खाता . है तो फ़ंक्शन विफल हो जाएगा एसक्यूएल एक्सप्रेस में पहुंच के रूप में सूचीबद्ध नहीं है। यह केवल एक समस्या है यदि डेटाबेस एक Windows उपयोगकर्ता खाते के साथ बनाया गया है लेकिन कोड एक अलग Windows उपयोगकर्ता खाते के अंतर्गत चलाया जाता है ।

SQL और PyODBC में डेटा डालने का सबसे खराब तरीका

कई शुरुआती पायथन डेवलपर्स PyODBC . को कॉल करने के लिए लुभाते हैं INSERT . को कॉल करता है कोड के निम्नलिखित अनुभागों में कथन, और आगे जो कहा जाएगा उसके संदर्भ में, यह एक बुरा विचार नहीं है:

चित्र 16 - डेटाबेस के साथ काम करने का "लगभग" गलत तरीका

PyODBC . पर कॉल का उपयोग करने का कारण INSERTs करने के लिए , चयन , और अन्य डेटाबेस से संबंधित कार्य, जैसे कि अद्यतन करें या हटाएं , लूप के भीतर खराब हो सकता है क्योंकि इनमें से प्रत्येक कॉल के साथ ओवरहेड होता है। एक लूप के भीतर जो संभावित रूप से सैकड़ों बार, हजारों बार, या इससे भी अधिक पुनरावृति कर सकता है, इसके परिणामस्वरूप एक स्क्रिप्ट के माध्यम से चलने के लिए महत्वपूर्ण समय (मिनट या अधिक) हो सकता है। ऐसे वेब अनुप्रयोगों के लिए जो इस तरह के दृष्टिकोण का उपयोग करते हैं, प्रदर्शन समस्याएं और भी जटिल हो जाती हैं, क्योंकि कई वेब सर्वर एक स्क्रिप्ट के चलने के समय पर हार्ड कैप लगाते हैं। कभी भी किसी भी परिस्थिति में उपयोगकर्ता द्वारा बनाए गए इनपुट को सीधे डेटाबेस में पास न करें। यह सुनिश्चित करने के लिए हमेशा इनपुट की जांच करें कि यह डेटाबेस की कार्यक्षमता को नहीं तोड़ेगा या SQL इंजेक्शन हमले के माध्यम से सुरक्षा समस्या का कारण नहीं बनेगा।

आदर्श रूप से, कोई SQL बैच (कथनों की एक सूची) बनाने के लिए उपरोक्त लूप का उपयोग करना चाहेगा और उसके बाद PyODBC होगा उस एकल बैच पर चलते हैं, लेकिन यह एक बहुत बुरा विचार होगा यदि डेटा को साफ नहीं किया जाता है।

डेटा को सैनिटाइज़ करने की आवश्यकता क्यों होगी? कारण सुरक्षा के लिए उबलता है, क्योंकि उपयोगकर्ता इनपुट पर कभी भरोसा नहीं किया जा सकता है। डेटा को सेनिटाइज़ करने का अर्थ है इसे इस तरह से प्रस्तुत करना जो प्रोग्राम के डेवलपर द्वारा बनाए गए SQL स्टेटमेंट के अलावा किसी अन्य चीज़ को निष्पादित होने से रोकता है। एक उपयोगकर्ता दुर्भावनापूर्ण रूप से निर्मित स्ट्रिंग पास कर सकता है जो मनमाने ढंग से बनाए गए SQL कोड के निष्पादन को सक्षम करेगा। इसे SQL इंजेक्शन अटैक के रूप में जाना जाता है। जबकि एक बैच में जाने वाले डेटा मूल्यों को साफ किया जा सकता है, ऐसा करने की प्रक्रिया एक परिचयात्मक ट्यूटोरियल के दायरे से बाहर है।

पीओओडीबीसी उपयोगकर्ता इनपुट को साफ करके डेटाबेस को SQL इंजेक्शन हमलों से बचाने के लिए एक तंत्र प्रदान करता है। इनमें पैरामीटरयुक्त कथनों . का उपयोग शामिल है , जिसे तैयार विवरण . भी कहा जाता है . सुरक्षा हमेशा प्राथमिकता होनी चाहिए, भले ही यह गति या अन्य प्रदर्शन मीट्रिक की कीमत पर आती हो।

इस डेटाबेस तक पहुँच रखने वाले Windows उपयोगकर्ता खाते में डिफ़ॉल्ट रूप से sysadmin विशेषाधिकार होते हैं। इसका मतलब है कि यदि SQL इंजेक्शन हमला होता है, तो एक दुर्भावनापूर्ण उपयोगकर्ता सर्वर पर प्रत्येक डेटाबेस के सभी डेटा तक पहुंच प्राप्त कर सकता है। व्यवहार में, sysadmin विशेषाधिकार वाले किसी भी खाते को Python कोड से किसी भी डेटाबेस तक नहीं पहुंचना चाहिए।

नीचे दी गई सूची PyODBC . का उपयोग करके पहले पायथन कोड उदाहरण को बढ़ाती है डेटा डालने के लिए कर्सर:

# bad-band-name-maker2.pyimport sysimport randomimport pyodbcpart1 =["द", "अनकूक्ड", "अपीलिंग", "लार्जर देन लाइफ", "ड्रोपिंग", "अनवेल", "एट्रोसियस", "ग्लॉसी" ", "बैराज", "गैरकानूनी"] part2 =["पराजित", "हाई-फाई", "एक्सट्राटेरेस्ट्रियल", "एडम्ब्रेशन", "लिम्पिड", "लूप्टिड", "क्रॉमुलेंट", "अनसेटल्ड", "सूट" , "ट्विंकल"] part3 =["ब्रेन", "सेगमेंट", "ऑडियो", "वैध व्यवसाय", "मानसिकता", "ध्वनि", "कैंटिकल", "मानसून", "संरक्षित", "Hangout"] part4 =["कौगर", "शेर", "लिंक्स", "ओसेलॉट", "प्यूमा", "जगुआर", "पैंथर"] part5 =["चारा", "एर्सत्ज़ गुड्स", "लेफ्टओवर", "शिशु सूत्र" , "Mush", "Smoothie", "Milkshakes"]def main(argv):# RazorDemo डेटाबेस से कनेक्ट करें। conn =pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=localhost\SQLEXPRESS;Database=RazorDemo;Trusted_Connection=yes;") # 15 खराब बैंड नाम उत्पन्न करें, और उन्हें अद्वितीय रखने का प्रयास करें। पिछलानाम ="" नामगणना =0 जबकि (नामगणना <16):रैंड 1 =यादृच्छिक। रैंडरेंज (0, 9) रैंड 2 =यादृच्छिक। रैंडरेंज (0, 9) रैंड 3 =यादृच्छिक। रैंडरेंज (0, 9) खराब नाम =भाग 1 [रैंड 1] + '' + part2[rand2] + '' '+ part3[rand3] # अद्वितीयता सुनिश्चित करने का एक कच्चा लेकिन प्रभावी तरीका, हालांकि डेटाबेस में कलाकार के नाम पर कोई अनूठी बाधा नहीं है। # यह पहले इस्तेमाल किए गए नामों और वर्तमान नाम दोनों की सूची में बार को जोड़ता और जोड़ता है। यदि वर्तमान नाम # नया है, तो वह उस स्ट्रिंग में नहीं होगा। अगर ("|" + पिछले नाम + "|")। ढूंढें ("|" + BadName + "|") ==-1:प्रिंट ("बैंड नाम [" + str (नाम गणना) + "] है [" + badName + "]") sql1 ="कलाकारों में डालें (कलाकार_नाम) मान (?)" मान 1 =[खराब नाम] rs1 =conn.cursor() rs1.execute (sql1, मान 1) rs1.commit () # यदि कर्सर नहीं है बंद है, तो अन्य कर्सर निष्पादित नहीं किए जा सकते हैं। rs1.close() रेंज में y के लिए(1, 3):rand4 =random.randrange(0, len(part4)) rand5 =random.randrange(0, len(part5)) albumName =part4[rand4] + " " + part5[rand5] प्रिंट ("\tAlbum [" + albumName + "]") sql2 ="एल्बम में डालें (artist_id, album_name) मान ((कलाकारों से शीर्ष 1 rcdid चुनें जहां कलाकार_नाम =?),?)" # प्रत्येक सरणी आइटम यहाँ की स्थिति से मेल खाती है? उपरोक्त SQL कथन में। value2 =[badName, albumName] rs2 =conn.cursor () rs2.execute(sql2, value2) rs2.commit() rs2.close() # पहले इस्तेमाल किए गए नामों की बार-सीमांकित सूची बनाता है। अगर पिछला नाम =="":पिछला नाम =बुरा नाम अन्य:पिछला नाम =पिछला नाम + "|" + badName nameCount =1 + name और गिनें:प्रिंट ("[" + badName + "]" का डुप्लिकेट मिला) #प्रिंट (पिछला नाम) # कनेक्शन बंद करें। बंद करें () वापसी 0if __name__ =="__main__":main( sys.argv[1:])सूची 3 - डेटा सम्मिलित करना

कोड के आउटपुट को सत्यापित करने के लिए SSMS में निम्नलिखित क्वेरी चलाई जा सकती हैं:

चित्र 17 - डेटा का सफल सम्मिलन

एसक्यूएल एक्सप्रेस और पायथन में डेटा का चयन करना

अब जब डेटाबेस में डेटा है, तो इसे क्वेरी करना अच्छा होगा। नीचे एक सरल स्क्रिप्ट है जो कीबोर्ड से उपयोगकर्ता डेटा को स्वीकार करती है और इसे पैरामीटरयुक्त क्वेरी के माध्यम से डेटाबेस में भेजती है:

# bad-band-name-maker3.pyimport sysimport pyodbcdef main(argv):searchValue =input("कुछ दर्ज करें:") # लंबाई को कुछ उचित पर कैप करें। पहले 20 अक्षर। searchValue =searchValue[0:20] # सर्च वैल्यू को लोअर केस पर सेट करें ताकि हम केस-असंवेदनशील मिलान कर सकें:searchValue =searchValue.lower() # RazorDemo डेटाबेस से कनेक्ट करें। conn =pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=localhost\SQLEXPRESS;Database=RazorDemo;Trusted_Connection=yes;") # SQL इंजेक्शन हमलों से बचाने के लिए आपको यहां एक पैरामीटरयुक्त क्वेरी का उपयोग करना चाहिए ! # समान ऑपरेटर के लिए, प्रतिशत संकेतों को शब्द से अलग किया जाना चाहिए अन्यथा पैरामीटरकरण विफल हो जाएगा। sql1 =("कलाकारों से a.artist_name, b.album_name चुनें a, एल्बम b जहां b.artist_id =a.rcdid और" + "निचला (album_name) जैसे ('%' + ? + '%') क्रम a. कलाकार_नाम, b.album_name") # नीचे एक तत्व के साथ एक सरणी है:मान 1 =[खोजवैल्यू] rs1 =conn.cursor () rs1.execute (sql1, मान 1) पंक्तियाँ 1 =rs1.fetchone () #प्रिंट ("प्रकार है [ "+ str(type(rows1)) + "]") if str(type(rows1)).find("NoneType") ==-1:जबकि Rows1:# Columns केवल संख्या द्वारा अनुक्रमित होते हैं। 0 a.artist_name कॉलम है और 1 b.album_name कॉलम है प्रिंट(rows1[0] + "-" + Rows1[1]) Rows1 =rs1.fetchone() अन्य:प्रिंट ("कोई एल्बम नाम मेल नहीं खाता [" + searchValue + "]") # कनेक्शन बंद करें conn.close() वापसी 0if __name__ =="__main__":main(sys.argv[1:]) लिस्टिंग 4 - डेटा क्वेरी करना 

वही परिणाम। एक में क्रूड SQL इंजेक्शन हमले का एक उदाहरण भी शामिल है:

चित्र 18 - क्वेरी परिणाम। अंतिम खोज मान नोट करें।

पायथन डेटाबेस विकास पर अंतिम विचार

पाइथन का उपयोग करके SQL सर्वर-संचालित अनुप्रयोगों को विकसित करने के लिए वास्तव में कोई सीमा नहीं है। एक डेवलपर केवल SQL के ज्ञान से सीमित होता है, और उम्मीद है कि इस लेख में प्रस्तुत मूलभूत अवधारणाएँ SQL की समझ को व्यापक बनाने और अधिक जटिल अनुप्रयोगों के निर्माण के संदर्भ में एक शुरुआती स्तर के डेवलपर को सही दिशा में इंगित कर सकती हैं।

यह पायथन डेटाबेस प्रोग्रामिंग ट्यूटोरियल प्रस्तुत किया गया है जिसके द्वारा SQL सर्वर के लिए एक विकासात्मक स्टैंड-इन के रूप में SQL एक्सप्रेस को स्थापित किया जा सकता है, और दिखाया गया है कि उस सर्वर पर SQL एक्सप्रेस डेटाबेस इंस्टेंस के साथ ठीक से संवाद करने के लिए पायथन 3 को कैसे बढ़ाया जा सकता है। इस आलेख में यह भी दिखाया गया है कि किसी SQL एक्सप्रेस या SQL सर्वर डेटाबेस को प्रबंधित करने के लिए SQL सर्वर प्रबंधन स्टूडियो का उपयोग कैसे किया जाना चाहिए। आगे बढ़ते हुए, इस लेख ने बुनियादी सुरक्षा सावधानियों और SQL सर्वर संचालित अनुप्रयोगों के लिए उचित निष्पादन समय सुनिश्चित करने के प्रयोजनों के लिए कुशल कोडिंग के उपयोग को भी छुआ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सरल मानकीकरण और तुच्छ योजनाएँ — भाग 2

  2. 8 WP-CLI आपकी साइट को साफ और अनुकूलित करने के लिए आदेश देता है

  3. टाइम सीरीज डेटाबेस क्या है?

  4. एसक्यूएल ट्रंकेट

  5. SQL COALESCE फ़ंक्शन का व्यावहारिक उपयोग