Python Academy · पाठ

ट्रांज़ैक्शन और संदर्भ प्रबंधक

सुरक्षित रूप से कमिट और रोलबैक करें

पाठ 4, कुल 4 में से13 चरण

ट्रांज़ैक्शन और संदर्भ प्रबंधक, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

लेन-देन क्या है

लेन-देन कई कथनों को एक साथ समूहित करता है, ताकि वे या तो सभी सफल हों या सभी एक साथ विफल हों। इससे आपका डेटा सुसंगत रहता है।

डेटा बदलने वाले कथनों से पहले SQLite स्वतः लेन-देन शुरू करता है।

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
print('Table ready for transactions')
conn.close()

सहेजने के लिए बदलाव पक्का करें

जब तक आप conn.commit() कॉल नहीं करते, बदलाव स्थायी नहीं होते। तब तक वे केवल मौजूदा लेन-देन में रहते हैं।

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
cur.execute('INSERT INTO accounts (balance) VALUES (100)')
conn.commit()
print('Committed')
conn.close()

बदलाव वापस लेना

conn.rollback() पिछले कमिट के बाद किए गए हर बदलाव को वापस लेता है। कुछ गड़बड़ होने पर इसका उपयोग करें।

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
conn.commit()
cur.execute('INSERT INTO accounts (balance) VALUES (100)')
conn.rollback()
cur.execute('SELECT COUNT(*) FROM accounts')
print('Rows after rollback:', cur.fetchone()[0])
conn.close()

धन का स्थानांतरण

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

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 100)')
cur.execute('INSERT INTO accounts (id, balance) VALUES (2, 50)')
cur.execute('UPDATE accounts SET balance = balance - 30 WHERE id = 1')
cur.execute('UPDATE accounts SET balance = balance + 30 WHERE id = 2')
conn.commit()
cur.execute('SELECT id, balance FROM accounts')
print(cur.fetchall())
conn.close()

try/except से त्रुटियाँ संभालना

लेन-देन को try/except में रखें। त्रुटि होने पर बदलाव वापस लें, ताकि अधूरे बदलाव आपका डेटा ख़राब न करें।

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
try:
    cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 100)')
    cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 200)')
    conn.commit()
except sqlite3.IntegrityError:
    conn.rollback()
    print('Rolled back after error')
conn.close()

संदर्भ प्रबंधक के रूप में कनेक्शन

with conn: का उपयोग करने पर सफलता की स्थिति में बदलाव अपने-आप पक्के हो जाते हैं और ब्लॉक के भीतर कोई अपवाद आने पर बदलाव वापस ले लिए जाते हैं।

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
with conn:
    conn.execute('INSERT INTO accounts (balance) VALUES (100)')
print('Auto-committed via with block')
conn.close()

अपवाद पर स्वतः बदलाव वापस लेना

यदि with conn: ब्लॉक कोई अपवाद उत्पन्न करता है, तो लेन-देन अपने-आप वापस ले लिया जाता है। ध्यान दें कि कनेक्शन स्वयं खुला रहता है।

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY)')
try:
    with conn:
        conn.execute('INSERT INTO accounts (id) VALUES (1)')
        conn.execute('INSERT INTO accounts (id) VALUES (1)')
except sqlite3.IntegrityError:
    print('Block rolled back automatically')
count = conn.execute('SELECT COUNT(*) FROM accounts').fetchone()[0]
print('Rows:', count)
conn.close()

कनेक्शन के लिए closing()

contextlib.closing सहायक यह सुनिश्चित करता है कि ब्लॉक समाप्त होने पर close() कॉल हो, जिससे कनेक्शन मुक्त हो जाता है।

import sqlite3
from contextlib import closing
with closing(sqlite3.connect(':memory:')) as conn:
    conn.execute('CREATE TABLE t (id INTEGER)')
    print('Used inside closing()')
print('Connection closed automatically')

दोनों तरीकों को मिलाना

लेन-देन संभालने और कनेक्शन बंद होना सुनिश्चित करने, दोनों के लिए closing(...) के भीतर with conn: रखें।

import sqlite3
from contextlib import closing
with closing(sqlite3.connect(':memory:')) as conn:
    conn.execute('CREATE TABLE t (id INTEGER, v TEXT)')
    with conn:
        conn.execute('INSERT INTO t VALUES (1, ?)', ('hello',))
    print(conn.execute('SELECT * FROM t').fetchall())

isolation_level

कनेक्शन का isolation_level नियंत्रित करता है कि लेन-देन कब शुरू हों। डिफ़ॉल्ट सेटिंग SQLite को इसे संभालने देती है; इसे None पर सेट करने से स्वतः-कमिट मोड सक्रिय हो जाता है।

import sqlite3
conn = sqlite3.connect(':memory:')
print('Default isolation_level:', repr(conn.isolation_level))
conn.isolation_level = None
print('Now autocommit:', conn.isolation_level)
conn.close()

लेन-देन क्यों महत्वपूर्ण हैं

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

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE log (msg TEXT)')
with conn:
    conn.execute('INSERT INTO log VALUES (?)', ('all or nothing',))
print('Atomic write done')
conn.close()

त्वरित जाँच

लेन-देन की अपनी जानकारी जाँचें।

पुनरावलोकन

आपने लेन-देन को सुरक्षित रूप से संभालना सीखा।

  • commit() बदलाव सहेजता है; rollback() उन्हें वापस लेता है
  • जोखिमपूर्ण लेखन को बदलाव वापस लेने वाले try/except में रखें
  • with conn: अपने-आप कमिट या रोलबैक करता है
  • contextlib.closing कनेक्शन के बंद होने की गारंटी देता है
शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “ट्रांज़ैक्शन और संदर्भ प्रबंधक” पाठ निःशुल्क है?

हाँ—“ट्रांज़ैक्शन और संदर्भ प्रबंधक” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“ट्रांज़ैक्शन और संदर्भ प्रबंधक” में मैं क्या सीखूँगा?

सुरक्षित रूप से कमिट और रोलबैक करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“ट्रांज़ैक्शन और संदर्भ प्रबंधक” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. कनेक्ट करना और तालिकाएँ बनाना
  2. Insert, Select, Update, Delete
  3. पैरामीटरयुक्त क्वेरी
  4. ट्रांज़ैक्शन और संदर्भ प्रबंधक
← Python Academy पर वापस जाएँ