0Pricing
Python Academy · Ders

İşlemler ve Bağlam Yöneticileri

Güvenle kaydedin ve geri alın

İşlemler ve Bağlam Yöneticileri, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

İşlem Nedir?

İşlem, birkaç ifadeyi bir araya getirerek hepsinin birlikte başarılı olmasını veya birlikte başarısız olmasını sağlar. Bu, verilerinizin tutarlı kalmasına yardımcı olur.

SQLite, veri değiştiren ifadelerden önce otomatik olarak bir işlem başlatır.

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()

Kaydetmek İçin Commit

conn.commit() işlevini çağırana kadar değişiklikler kalıcı değildir. O zamana kadar yalnızca geçerli işlem içinde bulunurlar.

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()

Geri Alma

conn.rollback(), son commit işleminden bu yana yapılan her değişikliği geri alır. Bir şeyler ters gittiğinde kullanın.

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()

Para Transferi

Birden çok güncellemenin eş zamanlı kalması gerektiğinde işlemler büyük önem taşır. Banka transferinde bir hesaptan para çıkarılır ve başka bir hesaba eklenir. Ya ikisi de gerçekleşmeli ya da hiçbiri gerçekleşmemelidir.

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 ile Hataları Ele Alma

Bir işlemi try/except içine alın. Hata oluştuğunda geri alma işlemi yapın; böylece kısmi değişiklikler verilerinizi bozmaz.

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()

Bağlantıyı Bağlam Yöneticisi Olarak Kullanma

with conn: kullanmak, başarı durumunda otomatik olarak commit işlemi yapar ve blok içinde bir istisna oluşursa geri alma işlemi gerçekleştirir.

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()

İstisnada Otomatik Geri Alma

with conn: bloğu hata vererek sonlanırsa işlem otomatik olarak geri alınır. Ancak bağlantının kendisinin açık kalacağını unutmayın.

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()

Bağlantı için closing()

contextlib.closing yardımcısı, blok sona erdiğinde close() işlevinin çağrılmasını garanti ederek bağlantıyı serbest bırakır.

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')

Her İki Deseni Birleştirme

Hem işlemi yönetmek hem de bağlantının kapanmasını sağlamak için with conn: bloğunu closing(...) içine yerleştirin.

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

Bağlantının isolation_level değeri, işlemlerin ne zaman başlayacağını denetler. Varsayılan ayar, yönetimi SQLite'a bırakır; değeri None olarak ayarlamak otomatik commit modunu etkinleştirir.

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()

İşlemler Neden Önemlidir?

İşlemler olmadan, güncelleme sırasında meydana gelen bir çökme verilerin yarım kalmasına neden olabilir. İşlemler, bir değişiklik kümesini atomik, yani bölünemez hâle getirir. Bu, bütünlüğü korur.

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()

Hızlı Kontrol

İşlemler hakkındaki bilginizi sınayın.

Özet

İşlemleri güvenli şekilde yönetmeyi öğrendiniz.

  • commit() değişiklikleri kaydeder; rollback() bunları geri alır
  • Riskli yazma işlemlerini geri alma işlemiyle birlikte try/except içine alın
  • with conn: otomatik commit veya otomatik geri alma yapar
  • contextlib.closing bağlantının kapanmasını garanti eder

Sıkça Sorulan Sorular

“İşlemler ve Bağlam Yöneticileri” dersi ücretsiz mi?

Evet — “İşlemler ve Bağlam Yöneticileri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“İşlemler ve Bağlam Yöneticileri” dersinde ne öğreneceğim?

Güvenle kaydedin ve geri alın Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“İşlemler ve Bağlam Yöneticileri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tablolara Bağlanma ve Tablo Oluşturma
  2. Ekleme, Seçme, Güncelleme, Silme
  3. Parametreli Sorgular
  4. İşlemler ve Bağlam Yöneticileri
← Python Academy Sayfasına Dön