• Home
  • /
  • Blog
  • /
  • पायथन में डेटाबेस प्रोग्रामिंग – शुरुआती के लिए ट्यूटोरियल

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

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

This post is also available in: English (English) العربية (Arabic)

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

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

पायथन प्रोग्रामिंग भाषा में डेटाबेस प्रोग्रामिंग के लिए शक्तिशाली विशेषताएं हैं। पायथन विभिन्न डेटाबेस जैसे MySQL, Oracle, Sybase, PostgreSQL, आदि का समर्थन करता है। पायथन डेटा डेफिनिशन लैंग्वेज (डीडीएल), डेटा मैनिपुलेशन लैंग्वेज (डीएमएल), और डेटा क्वेरी स्टेटमेंट का भी समर्थन करता है। डेटाबेस प्रोग्रामिंग के लिए, पायथन डीबी एपीआई एक व्यापक रूप से इस्तेमाल किया जाने वाला मॉड्यूल है जो डेटाबेस एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस प्रदान करता है।

Database Programming in Python

पायथन के लिए डीबी-एपीआई (एसक्यूएल-एपीआई)

पायथन डीबी-एपीआई प्रदान करता है जो किसी भी डेटाबेस इंजन से स्वतंत्र है और यह आपको किसी भी डेटाबेस इंजन तक पहुंचने के लिए पायथन स्क्रिप्ट लिखने में सक्षम बनाता है। विभिन्न डेटाबेस के लिए पायथन डीबी-एपीआई कार्यान्वयन इस प्रकार है –

  • MySQL के लिए यह MySQLdb है।
  • PostgreSQL के लिए यह psycopg, PyGresQL और pyPgSQL है
  • Oracle के लिए इसमें dc_oracle2 और cx_oracle है।
  • DB2 के लिए DB-API कार्यान्वयन Pydb2 है।

पायथन के डीबी-एपीआई में कनेक्शन ऑब्जेक्ट, कर्सर ऑब्जेक्ट, मानक अपवाद और कुछ अन्य मॉड्यूल सामग्री शामिल हैं।

कनेक्शन ऑब्जेक्ट्स

पायथन के डीबी-एपीआई में कनेक्शन ऑब्जेक्ट डेटाबेस के साथ एक कनेक्शन बनाते हैं जो आगे विभिन्न लेनदेन के लिए उपयोग किया जाता है। इन कनेक्शन ऑब्जेक्ट्स का उपयोग डेटाबेस सत्र के प्रतिनिधियों के रूप में भी किया जाता है।

पायथन में डेटाबेस से कनेक्शन निम्नानुसार बनाया गया है:

conn = MySQLdb.connect(‘library’, user=’user_name’, password=’python’)

डेटाबेस से कनेक्शन स्थापित होने के बाद, आप इसे commit(), rollback(), और close() जैसी वस्तुओं को कॉल करने के लिए उपयोग कर सकते हैं।

Commit: एक सामान्य अर्थ में, एक डेटाबेस में एक रिकॉर्ड का अद्यतन करना एक commit है। एक डेटाबेस लेनदेन के संदर्भ में, एक commit अस्थायी परिवर्तनों के एक सेट के बाद स्थायी रूप से डेटा की बचत को संदर्भित करती है। एक commit एक रिलेशनल डेटाबेस के भीतर एक लेनदेन समाप्त करता है और अन्य सभी उपयोगकर्ताओं को परिवर्तन देखने की अनुमति देता है।

रोलबैक: डेटाबेस तकनीकों में, रोलबैक एक ऑपरेशन है जो डेटाबेस को कुछ पिछली स्थिति में लौटाता है। डेटाबेस अखंडता के लिए रोलबैक महत्वपूर्ण हैं क्योंकि उनका मतलब है कि गलत संचालन के बाद भी डेटाबेस को एक क्लीन कॉपी में पुनर्स्थापित किया जा सकता है।

cur = conn.cursor() //creates new cursor object for executing SQL statementsconn.commit() //Commits the transactionsconn.rollback() //Roll back the transactionsconn.close() //closes the connectionconn.callproc(proc,param) //call stored procedure for executionconn.getsource(proc) //fetches stored procedure code

कर्सर ऑब्जेक्ट्स

कर्सर SQL की शक्तिशाली विशेषताओं में से एक है। ये ऐसे ऑब्जेक्ट हैं जो डेटाबेस सर्वर पर विभिन्न SQL स्टेटमेंट सबमिट करने के लिए जिम्मेदार हैं। MySQLdb.cursors में कई कर्सर वर्ग हैं:

  • BaseCursor कर्सर ऑब्जेक्ट्स के लिए बेस क्लास है।
  • कर्सर डिफ़ॉल्ट कर्सर वर्ग है। CursorWarningMixIn, CursorStoreResultMixIn, CursorTupleRowsMixIn, और BaseCursorकर्सर वर्ग के कुछ घटक हैं।
  • CursorStoreResultMixInनिष्पादित क्वेरी से परिणाम सेट पुनर्प्राप्त करने के लिए mysql_store_result() फ़ंक्शन का उपयोग करता है। ये परिणाम सेट क्लाइंट साइड पर संग्रहीत किए जाते हैं।
  • CursorUseResultMixIn निष्पादित क्वेरी से परिणाम सेट पुनर्प्राप्त करने के लिए mysql_use_result() फ़ंक्शन का उपयोग करता है। ये परिणाम सेट सर्वर साइड पर संग्रहीत होते हैं।

निम्न उदाहरण कर्सर ऑब्जेक्ट्स का उपयोग करके SQL कमांड के निष्पादन को दिखाता है। आप SELECT जैसे SQL कमांड को निष्पादित करने के लिए एक्ज़ीक्यूट का उपयोग कर सकते हैं। सभी SQL संचालन करने के लिए आपको cursor.close() कर्सर के रूप में बंद करना होगा।

cursor.execute(‘SELECT * FROM books’)cursor.execute(”’SELECT * FROM books WHERE book_name = ‘python’ AND book_author = ‘Mark Lutz’)cursor.close()

कर्सर ऑब्जेक्ट्स

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

कर्सर ऐट्रिब्यूट्स (गुण)

कर्सर ऑब्जेक्ट्स को निम्न विधियों और विशेषताओं का जवाब देना चाहिए।

.description: यह केवल-पढ़ने (read-only) के लिए विशेषता 7-आइटम अनुक्रमों का अनुक्रम है। इनमें से प्रत्येक अनुक्रम में एक परिणाम कॉलम का वर्णन करने वाली जानकारी होती है:

  • name
  • type_code
  • display_size
  • internal_size
  • precision
  • scale
  • null_ok

पहले दो आइटम (name और type_code) अनिवार्य हैं, अन्य पांच वैकल्पिक हैं और यदि कोई सार्थक मान प्रदान नहीं किया जा सकता है तो उन्हें कोई नहीं पर सेट किया जाता है। यह विशेषता उन ऑपरेशनों के लिए कोई नहीं होगी जो पंक्तियों को वापस नहीं करते हैं या यदि कर्सर ने अभी तक .execute*() विधि के माध्यम से कोई ऑपरेशन नहीं किया है।

.rowcount: यह केवल-पढ़ने के लिए विशेषता उन पंक्तियों की संख्या निर्दिष्ट करती है जो अंतिम .execute*() उत्पादित (चयन जैसे DQL कथनों के लिए) या प्रभावित (UPDATE या INSERT जैसे DML कथनों के लिए)। विशेषता -1 है यदि कर्सर पर कोई .execute*() निष्पादित नहीं किया गया है या अंतिम ऑपरेशन की पंक्ति गणना इंटरफ़ेस द्वारा निर्धारित नहीं की जा सकती है।

कर्सर मेथड्स

यह विधि वैकल्पिक है क्योंकि सभी डेटाबेस संग्रहीत कार्यविधियाँ प्रदान नहीं करते हैं।

.callproc(procname [, parameters]): यह दिए गए नाम के साथ एक संग्रहीत डेटाबेस प्रक्रिया को कॉल करता है। पैरामीटर के अनुक्रम में प्रत्येक तर्क के लिए एक प्रविष्टि होनी चाहिए जिसकी प्रक्रिया अपेक्षा करती है। कॉल का परिणाम इनपुट अनुक्रम की एक संशोधित प्रति के रूप में लौटाया जाता है। इनपुट पैरामीटर्स को अछूता छोड़ दिया गया है, आउटपुट और इनपुट/आउटपुट पैरामीटर को संभवतः नए मानों के साथ बदल दिया गया है। प्रक्रिया आउटपुट के रूप में सेट परिणाम भी प्रदान कर सकती है। इसके बाद इसे मानक .fetch*() विधियों के माध्यम से उपलब्ध कराया जाना चाहिए।

.close(): कर्सर को अभी बंद करें। इस बिंदु से आगे कर्सर अनुपयोगी होगा; यदि कर्सर के साथ कोई ऑपरेशन करने का प्रयास किया जाता है तो एक त्रुटि (या उपवर्ग) अपवाद उठाया जाएगा।

.execute (operation [, parameters]): डेटाबेस ऑपरेशन (क्वेरी या कमांड) तैयार करें और निष्पादित करें। पैरामीटर अनुक्रम या मानचित्रण के रूप में प्रदान किए जा सकते हैं और ऑपरेशन में चर के लिए बाध्य होंगे। चर एक डेटाबेस-विशिष्ट संकेतन में निर्दिष्ट हैं। ऑपरेशन का एक संदर्भ कर्सर द्वारा रखा जाएगा। यदि उसी ऑपरेशन ऑब्जेक्ट को फिर से पास किया जाता है, तो कर्सर अपने व्यवहार को अनुकूलित कर सकता है। यह एल्गोरिदम के लिए सबसे प्रभावी है जहां एक ही ऑपरेशन का उपयोग किया जाता है, लेकिन विभिन्न पैरामीटर इसके लिए बाध्य होते हैं (कई बार)।

किसी ऑपरेशन का पुन: उपयोग करते समय अधिकतम दक्षता के लिए, समय से पहले पैरामीटर प्रकार और आकार निर्दिष्ट करने के लिए .setinputsizes() विधि का उपयोग करना सबसे अच्छा है। एक पैरामीटर के लिए पूर्वनिर्धारित जानकारी से मेल नहीं खाना कानूनी है; कार्यान्वयन को संभवतः दक्षता के नुकसान के साथ क्षतिपूर्ति करनी चाहिए।

पैरामीटर को ट्यूपल्स की सूची के रूप में भी निर्दिष्ट किया जा सकता है उदा। एक ही ऑपरेशन में कई पंक्तियाँ डालें, लेकिन इस तरह के उपयोग को हटा दिया गया है: इसके बजाय .executemany() का उपयोग किया जाना चाहिए।

.executemany(operation, seq_of_parameters): एक डेटाबेस ऑपरेशन (क्वेरी या कमांड) तैयार करें और फिर इसे seq_of_parameters अनुक्रम में पाए गए सभी पैरामीटर अनुक्रमों या मैपिंग के विरुद्ध निष्पादित करें। मॉड्यूल .execute() विधि में एकाधिक कॉल का उपयोग करके या डेटाबेस को एक कॉल में संपूर्ण रूप से अनुक्रमित करने के लिए सरणी संचालन का उपयोग करके इस विधि को लागू करने के लिए स्वतंत्र हैं।

आप इस पद्धति का उपयोग उस ऑपरेशन के लिए कर सकते हैं जो एक या अधिक परिणाम सेट उत्पन्न करता है जो अपरिभाषित व्यवहार का गठन करता है, और कार्यान्वयन की अनुमति है (लेकिन आवश्यक नहीं) जब यह पता चलता है कि ऑपरेशन के आह्वान द्वारा परिणाम सेट बनाया गया है।

.fetchone(): क्वेरी परिणाम सेट की अगली पंक्ति प्राप्त करें, एकल अनुक्रम लौटाएं, या जब कोई और डेटा उपलब्ध न हो तो कोई नहीं। एक त्रुटि (या उपवर्ग) अपवाद उठाया जाता है यदि .execute*() को पिछली कॉल ने कोई परिणाम सेट नहीं किया या अभी तक कोई कॉल जारी नहीं किया गया था।

.fetchmany(strong, [size=cursor .arraysize]): किसी क्वेरी परिणाम की पंक्तियों का अगला सेट प्राप्त करें, अनुक्रमों का एक क्रम लौटाएं (उदा. टुपल्स की लिस्ट)। जब कोई और पंक्तियाँ उपलब्ध नहीं होती हैं तो एक खाली अनुक्रम वापस कर दिया जाता है। प्रति कॉल लाने के लिए पंक्तियों की संख्या पैरामीटर द्वारा निर्दिष्ट की जाती है। यदि यह नहीं दिया जाता है, तो कर्सर का सरणी आकार निर्धारित करता है कि पंक्तियों की संख्या प्राप्त की जाएगी। विधि को आकार पैरामीटर द्वारा इंगित के रूप में कई पंक्तियों को लाने का प्रयास करना चाहिए। यदि पंक्तियों की निर्दिष्ट संख्या उपलब्ध नहीं होने के कारण यह संभव नहीं है, तो कम पंक्तियों को वापस किया जा सकता है। एक त्रुटि (या उपवर्ग) अपवाद उठाया जाता है यदि .execute*() को पिछली कॉल ने कोई परिणाम सेट नहीं किया या अभी तक कोई कॉल जारी नहीं किया गया था।

.fetchall (): एक क्वेरी परिणाम की सभी (शेष) पंक्तियों को प्राप्त करें, उन्हें अनुक्रमों के अनुक्रम के रूप में लौटाएं (उदाहरण के लिए टुपल्स की एक सूची)। ध्यान दें कि कर्सर की सरणी आकार विशेषता इस ऑपरेशन के प्रदर्शन को प्रभावित कर सकती है। एक त्रुटि (या उपवर्ग) अपवाद उठाया जाता है यदि .execute*() को पिछली कॉल ने कोई परिणाम सेट नहीं किया या अभी तक कोई कॉल जारी नहीं किया गया था।

.nextset(): यह विधि कर्सर को अगले उपलब्ध सेट पर छोड़ देगी, वर्तमान सेट से किसी भी शेष पंक्तियों को छोड़ देगी। यदि कोई और सेट नहीं हैं, तो विधि कोई नहीं लौटाती है। अन्यथा, यह एक वास्तविक मान देता है, और .fetch*() विधियों के बाद के कॉल अगले परिणाम सेट से पंक्तियों को वापस कर देंगे। एक त्रुटि (या उपवर्ग) अपवाद उठाया जाता है यदि .execute*() को पिछली कॉल ने कोई परिणाम सेट नहीं किया या अभी तक कोई कॉल जारी नहीं किया गया था।

.arraysize: यह पढ़ने/लिखने की विशेषता एक समय में लाने के लिए पंक्तियों की संख्या निर्दिष्ट करती है .fetchmany ()। यह एक बार में एक पंक्ति लाने के लिए 1 अर्थ के लिए डिफ़ॉल्ट है। कार्यान्वयन को .fetchmany() विधि से संबंधित इस मान का पालन करना चाहिए, लेकिन एक समय में डेटाबेस के साथ एक पंक्ति में बातचीत करने के लिए स्वतंत्र हैं। इसका उपयोग .executemany() के कार्यान्वयन में भी किया जा सकता है।

.setinputsizes(sizes): इसका उपयोग कॉल करने से पहले .execute*() पर किया जा सकता है ऑपरेशन के मापदंडों के लिए स्मृति क्षेत्रों को पूर्वनिर्धारित करने के लिए। आकार अनुक्रम के रूप में निर्दिष्ट हैं – प्रत्येक इनपुट पैरामीटर के लिए एक आइटम। आइटम एक प्रकार का ऑब्जेक्ट होना चाहिए जो उपयोग किए जाने वाले इनपुट से मेल खाता हो, या यह एक पूर्णांक होना चाहिए जो स्ट्रिंग पैरामीटर की अधिकतम लंबाई निर्दिष्ट करता हो। यदि आइटम कोई नहीं है, तो उस कॉलम के लिए कोई पूर्वनिर्धारित स्मृति क्षेत्र आरक्षित नहीं किया जाएगा (यह बड़े इनपुट के लिए पूर्वनिर्धारित क्षेत्रों से बचने के लिए उपयोगी है)। इस विधि का उपयोग .execute*() विधि लागू होने से पहले किया जाएगा।

.setoutputsize(size [, column]): बड़े कॉलम (जैसे LONGs, BLOB, आदि) के लिए एक कॉलम बफर साइज सेट करें। कॉलम को परिणाम अनुक्रम में एक इंडेक्स के रूप में निर्दिष्ट किया गया है। कॉलम निर्दिष्ट नहीं करने से कर्सर में सभी बड़े कॉलम के लिए डिफ़ॉल्ट आकार सेट हो जाएगा। इस विधि का उपयोग .execute*() विधि लागू होने से पहले किया जाएगा।

पायथन और MySQL

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

import MySQLdb

डेटाबेस कनेक्शन

किसी प्रोग्राम में डेटाबेस का उपयोग करने का पहला चरण डेटाबेस कनेक्शन स्थापित करना है।

import MySQLdb# Open database connectiondb = MySQLdb.connect(“localhost”,”testuser”,”test123″,”TESTDB” )# prepare a cursor object using cursor() methodcursor = db.cursor()# execute SQL query using execute() method.cursor.execute(“SELECT VERSION()”)# Fetch a single row using fetchone() method.data = cursor.fetchone()print “Database version : %s ” % data# disconnect from serverdb.close()

यदि डेटा स्रोत के साथ एक कनेक्शन स्थापित किया जाता है, तो एक कनेक्शन ऑब्जेक्ट वापस कर दिया जाता है और आगे के उपयोग के लिए डीबी में सहेजा जाता है, अन्यथा, डीबी को कोई नहीं पर सेट किया जाता है। अगला, db ऑब्जेक्ट का उपयोग कर्सर ऑब्जेक्ट बनाने के लिए किया जाता है, जो बदले में SQL क्वेरीज़ को निष्पादित करने के लिए उपयोग किया जाता है। अंत में, बाहर आने से पहले, यह सुनिश्चित करता है कि डेटाबेस कनेक्शन बंद है और संसाधन जारी किए गए हैं।

एक डेटाबेस तालिका (table) बनाना

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

निम्नलिखित कोड एक डेटाबेस तालिका “Employee” बनाता है:

import MySQLdb# Open database connectiondb = MySQLdb.connect(“localhost”,”testuser”,”test123″,”TESTDB” )# prepare a cursor object using cursor() methodcursor = db.cursor()# Drop table if it already exist using execute() method.cursor.execute(“DROP TABLE IF EXISTS EMPLOYEE”)# Create table as per requirementsql = “””CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )”””cursor.execute(sql)# disconnect from serverdb.close()

INSERT ऑपरेशन

यह तब आवश्यक होता है जब आप अपने रिकॉर्ड को डेटाबेस तालिका में बनाना चाहते हैं। निम्न उदाहरण, EMPLOYEE तालिका में रिकॉर्ड बनाने के लिए SQL INSERT स्टेटमेंट निष्पादित करता है:

import MySQLdb# Open database connectiondb = MySQLdb.connect(“localhost”,”testuser”,”test123″,”TESTDB” )# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to INSERT a record into the database.sql = “””INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (‘Mac’, ‘Mohan’, 20, ‘M’, 2000)”””try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit()except: # Rollback in case there is any error db.rollback()# disconnect from serverdb.close()

READ ऑपरेशन

किसी भी डेटाबेस पर READ ऑपरेशन का मतलब डेटाबेस से कुछ उपयोगी जानकारी प्राप्त करना है। एक बार आपका डेटाबेस कनेक्शन स्थापित हो जाने के बाद, आप इस डेटाबेस में एक क्वेरी करने के लिए तैयार हैं। आप डेटाबेस तालिका से एकाधिक मान प्राप्त करने के लिए एकल रिकॉर्ड या fetchall() विधि लाने के लिए या तो fetchone() विधि का उपयोग कर सकते हैं।

  • fetchone(): यह एक क्वेरी परिणाम सेट की अगली पंक्ति प्राप्त करता है। एक परिणाम सेट एक वस्तु है जो किसी तालिका को क्वेरी करने के लिए कर्सर ऑब्जेक्ट का उपयोग करने पर वापस किया जाता है।
  • fetchall(): यह परिणाम सेट में सभी पंक्तियों को प्राप्त करता है। यदि परिणाम सेट से कुछ पंक्तियों को पहले ही निकाला जा चुका है, तो यह परिणाम सेट से शेष पंक्तियों को पुनः प्राप्त करता है।
  • rowcount: यह केवल-पढ़ने के लिए विशेषता है और execute() विधि से प्रभावित पंक्तियों की संख्या देता है।

निम्नलिखित कोड 1000 से अधिक वेतन वाले EMPLOYEE तालिका से सभी अभिलेखों को क्वेरी करता है:

import MySQLdb# Open database connectiondb = MySQLdb.connect(“localhost”,”testuser”,”test123″,”TESTDB” )# prepare a cursor object using cursor() methodcursor = db.cursor()sql = “SELECT * FROM EMPLOYEE WHERE INCOME > ‘%d'” % (1000)try: # Execute the SQL command cursor.execute(sql) # Fetch all the rows in a list of lists. results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # Now print fetched result print “fname=%s,lname=%s,age=%d,sex=%s,income=%d” % (fname, lname, age, sex, income )except: print “Error: unable to fecth data”# disconnect from serverdb.close()

UPDATE ऑपरेशन

किसी भी डेटाबेस पर UPDATE ऑपरेशन का मतलब एक या एक से अधिक रिकॉर्ड को अपडेट करना है, जो पहले से ही डेटाबेस में उपलब्ध हैं। निम्नलिखित कोड AGE को एक वर्ष बढ़ाकर ‘M’ के रूप में SEX वाले सभी रिकॉर्ड को अपडेट करता है।

import MySQLdb# Open database connectiondb = MySQLdb.connect(“localhost”,”testuser”,”test123″,”TESTDB” )# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to UPDATE required recordssql = “UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = ‘%c'” % (‘M’)try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit()except: # Rollback in case there is any error db.rollback()# disconnect from serverdb.close()

DELETE ऑपरेशन

यह तब आवश्यक होता है जब आप अपने डेटाबेस से कुछ रिकॉर्ड हटाना चाहते हैं। EMPLOYEE से सभी रिकॉर्ड हटाने के लिए कोड निम्नलिखित है जहां AGE 20 से अधिक है:

import MySQLdb# Open database connectiondb = MySQLdb.connect(“localhost”,”testuser”,”test123″,”TESTDB” )# prepare a cursor object using cursor() methodcursor = db.cursor()# Prepare SQL query to DELETE required recordssql = “DELETE FROM EMPLOYEE WHERE AGE > ‘%d'” % (20)try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit()except: # Rollback in case there is any error db.rollback()# disconnect from serverdb.close()

COMMIT ऑपरेशन

Commit वह ऑपरेशन है, जो परिवर्तनों को अंतिम रूप देने के लिए डेटाबेस को हरी झंडी देता है, और इस ऑपरेशन के बाद, कोई भी परिवर्तन वापस नहीं किया जा सकता है। commit ऑपरेशन करने के लिए निम्न कोड का उपयोग किया जाता है:

db.commit()

ROLLBACK ऑपरेशन

यदि आप एक या अधिक परिवर्तनों से संतुष्ट नहीं हैं और आप उन परिवर्तनों को पूरी तरह से पूर्ववत करना चाहते हैं, तो आप rollback() विधि का उपयोग कर सकते हैं। निम्नलिखित कोड रोलबैक ऑपरेशन करेगा।

db.rollback()

डेटाबेस को डिस्कनेक्ट करना

डेटाबेस कनेक्शन को डिस्कनेक्ट करने के लिए, आप close() विधि का उपयोग कर सकते हैं:

db.close()

यदि किसी डेटाबेस से कनेक्शन को उपयोगकर्ता द्वारा close() विधि से बंद कर दिया जाता है, तो किसी भी बकाया लेनदेन को डेटाबेस द्वारा वापस ले लिया जाता है। हालांकि, किसी भी डेटाबेस के निचले स्तर के कार्यान्वयन विवरण के आधार पर, आपका आवेदन स्पष्ट रूप से प्रतिबद्ध या रोलबैक को कॉल करने से बेहतर होगा।

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
>