İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • Geliştirici Araçları
  • mssql-python’da Context Manager ile Kaynak Yönetimi
Bulut Altyapı Geliştirici Araçları context manager, cursor, kaynak yönetimi, mssql-python, transaction yönetimi Aşkın KILIÇ 24/08/2026 3 Yorumlar

mssql-python’da Context Manager ile Kaynak Yönetimi

mssql-python'da Context Manager ile Kaynak Yönetimi
📑 İçindekiler
  1. Neden context manager?
  2. Klasik yaklaşımın sıkıntısı
  3. Bağlantı düzeyinde context manager
  4. Bloğa girerken ve çıkarken neler oluyor?
  5. İmleç düzeyinde context manager
  6. Pratik kullanım kalıpları
  7. Güvenli SELECT sorguları
  8. Tek transaction içinde birden fazla işlem
  9. Otomatik istisna yönetimi
  10. Gerçek hayatta nerelerde işe yarar?
  11. Özet
  12. İlgili İçerikler
  13. Kaynaklar ve İleri Okuma
⏱️ 4 dk okuma📅 24 Ağustos 2026

Python ile veritabanı işlerinde bağlantıyı açmak, imleç oluşturmak, sorguyu çalıştırmak, commit veya rollback etmek ve sonunda tüm nesneleri kapatmak zamanla tekrarlı bir ritüele dönüşür. Bu adımlardan birinin unutulması ise açık kalan bağlantılardan doğan sızıntılara ya da tutarsız veri durumlarına yol açabilir. Microsoft, mssql-python sürücüsüne eklediği context manager desteğiyle bu sorunu Python’un doğal with deyimine devrediyor ve kod tarafında belirgin bir sadelik sağlıyor.

Neden context manager?

Python’da with deyimi, kaynak yönetimi için tasarlanmış sözdizimsel bir kolaylık. Bloğa girildiğinde kaynak hazırlanır, blok bittiğinde (hata çıksa bile) temizlik otomatik yapılır. mssql-python tarafında bu destek hem bağlantı (connection) hem de imleç (cursor) düzeyinde çalışıyor; böylece elle close() çağırmaya gerek kalmıyor.

Klasik yaklaşımın sıkıntısı

Context manager desteği devreye girmeden önce tipik kullanım şöyleydi:

from mssql_python import connect
conn = connect(connection_string)
cursor = conn.cursor()
try:
cursor.execute("SELECT * FROM users")
for row in cursor:
print(row)
finally:
cursor.close()
conn.close()

Bu blok tek başına sorun çıkarmaz. Ama birden fazla imleç, çok sayıda sorgu ve iç içe geçmiş istisna yönetimi olan bir kodda her kaynağı elle kapatmak hem yorucu hem de hataya açık. Unutulan tek bir close() çağrısı bile kaynak sızıntısı demek.

Bağlantı düzeyinde context manager

Bir bağlantıyı with bloğuna aldığınızda arka planda şu davranışlar devreye giriyor:

  • Blok hatasız tamamlanırsa transaction otomatik olarak commit edilir.
  • Bir istisna çıkarsa değişiklikler rollback ile geri alınır.
  • Her durumda bağlantı bloktan çıkarken kapatılır.
from mssql_python import connect
with connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
# Hata yoksa → otomatik commit
# Hata varsa → otomatik rollback
# Bağlantı burada otomatik olarak kapanır

Aynı davranışı klasik yöntemle yazmak istediğinizde try/except/finally yapısına ek olarak autocommit kontrolünü, commit, rollback ve close çağrılarını elle yönetmeniz gerekir. Context manager bu kalıbı ortadan kaldırıyor.

Bloğa girerken ve çıkarken neler oluyor?

Bloğa girildiğinde bağlantı açılır ve blok içindeki tüm işlemler bu bağlantı üzerinden yürütülür. Bloktan çıkarken şu olur:

  • İstisna yoksa ve autocommit=False ise transaction commit edilir.
  • İstisna varsa ve autocommit=False ise commit edilmemiş değişiklikler rollback yapılır; istisna yakalanmadıysa çağrı zincirine iletilir.
  • Sonuç ne olursa olsun bağlantı kapatılır.

Bu yapı özellikle insert, update, delete gibi transactional işlemlerde kod güvenliğini belirgin biçimde artırıyor.

İmleç düzeyinde context manager

Cursor nesneleri de artık with deyimini destekliyor. Ama burada bağlam transaction’a değil doğrudan cursor kaynağına bağlı:

with conn.cursor() as cursor:
cursor.execute("SELECT * FROM users")
for row in cursor:
print(row)
# Cursor burada otomatik olarak kapanır

Bloğa girildiğinde yeni bir cursor oluşturulur, tüm SQL ifadeleri bu cursor üzerinden çalışır ve blok bitiminde cursor otomatik olarak kapatılır. Cursor’ın kendisi transaction yönetmez; commit ve rollback davranışı bağlantı seviyesinde belirlenir. autocommit=True durumunda her ifade anında commit edilir, autocommit=False durumunda commit/rollback kararını bağlantıdaki context manager verir.

Bu kullanım özellikle salt okunur sorgularda cursor sızıntısı endişesini ortadan kaldırdığı için pratik.

Pratik kullanım kalıpları

Güvenli SELECT sorguları

with connect(connection_string) as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM users WHERE age > 25")
for row in cursor:
print(row)
# Cursor kapandı, bağlantı hâlâ açık
# Bağlantı da kapandı

Tek transaction içinde birden fazla işlem

with connect(connection_string) as conn:
with conn.cursor() as cursor:
cursor.execute("INSERT INTO users (name) VALUES ('Bob')")
cursor.execute("UPDATE users SET age = age + 1 WHERE name = 'Alice'")
# İstisna yoksa tüm işlemler otomatik commit edilir

Otomatik istisna yönetimi

try:
with connect(connection_string) as conn:
with conn.cursor() as cursor:
cursor.execute("INSERT INTO users (name) VALUES ('Charlie')")
raise ValueError("Oops, something went wrong")
except ValueError as e:
print("Transaction rolled back due to:", e)
# Rollback yapıldı, bağlantı da kapatıldı

Gerçek hayatta nerelerde işe yarar?

Kaynakta öne çıkarılan senaryolara bakınca context manager desteğinin özellikle şu bağlamlarda değer ürettiği görülüyor:

  • Web uygulamaları: Her istek için bağlantı açılıp kapatılan yoğun trafikli servislerde açık kalan bağlantıların birikmesini önler; commit/rollback kararını otomatikleştirir.
  • Veri taşıma ve ETL: Bir tablodan diğerine kopyalayıp kaynaktan silme gibi iki aşamalı işlemlerde herhangi bir adım başarısız olursa tamamı geri alındığı için kısmi migrasyon riski ortadan kalkar.
  • Otomatik raporlama: Analitik için art arda çalıştırılan sorgularda her with bloğu kendi cursor’ını kapatır; script modüler ve bakımı kolay hale gelir.
  • Finansal işlemler: Hesaplar arası transfer gibi tutarlılığın kritik olduğu senaryolarda hata anında otomatik rollback, çift yazma ya da eksik güncelleme riskini azaltır.
  • Ad-hoc veri keşfi: Notebook veya kısa scriptlerde unutulan close() çağrılarını ortadan kaldırır, hızlı sorgular için temiz bir kalıp sunar.

Özet

mssql-python sürücüsündeki context manager desteği, Python’un “sade olan iyidir” felsefesini SQL Server ve Azure SQL etkileşimlerine taşıyor. Elde edilen kazançlar şöyle:

  • Daha az boilerplate: Cursor ve bağlantı için try/finally kalıbına gerek kalmıyor.
  • Otomatik transaction yönetimi: Başarı ya da başarısızlık durumuna göre commit veya rollback kendiliğinden gerçekleşiyor.
  • Güvenli kaynak temizliği: Bağlantı ve cursor’lar her koşulda kapatıldığından sızıntı riski azalıyor.
  • Okunabilir ve Pythonic kod: İç içe with blokları, kaynakların kapsamını görsel olarak da netleştiriyor.

Sürücü pip install mssql-python komutuyla kurulabiliyor; proje kodu ve tartışmalar GitHub üzerinden takip edilebiliyor. Ekip, topluluktan geri bildirim ve katkı beklediğini belirtiyor.

İlgili İçerikler

  • GitHub’da Deployment Context: Repo ve Alert Yönetimi
  • VS Code Python Environments Eklentisi Genel Kullanıma Açıldı
  • GitHub Copilot for Eclipse Açık Kaynak Oldu: Bu Ne Değiştiriyor?

Kaynaklar ve İleri Okuma

  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • Simplifying Resource Management in mssql-python through Context Manager (orijinal yazı)
  • microsoft/mssql-python (GitHub deposu)
  • mssql-python paketi (PyPI)
  • Sorun bildirimi (GitHub Issues)
  • GitHub Discussions
  • SQL Server Tech Community
  • Ücretsiz Azure SQL Database dağıtımı
  • Ücretsiz Azure SQL Managed Instance dağıtımı
  • İlgili yazı: mssql-python’a Apache Arrow Desteği
🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

VS Code’da Kurumsal Eklenti Dönemi: Kontrol, Hız, Düzen
VS Code’da Kurumsal Eklenti Dönemi: Kontrol, Hız, Düzen6 Haz 2026
Kanban ve Sprint Panolarında Alan Savaşı: Ekran Kurtarma
Kanban ve Sprint Panolarında Alan Savaşı: Ekran Kurtarma9 Mar 2026
SQL + AI: Elinizdeki Veriyi Bozmadan Akıllı Uygulama Kurmak
SQL + AI: Elinizdeki Veriyi Bozmadan Akıllı Uygulama Kurmak1 Haz 2026
Claude için Foundry'de Beş Yeni Yetenek: Ajan Çağı
Claude için Foundry'de Beş Yeni Yetenek: Ajan Çağı21 Ağu 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket context manager cursor kaynak yönetimi mssql-python transaction yönetimi
Önceki yazı

TypeScript 7 Aralık 2025: Native Port Nerede?

Sonraki yazı

Track organization code quality trends

İlginizi Çekebilir

Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
Aşkın KILIÇ 0

Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü

03/09/2026
GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
Aşkın KILIÇ 0

GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor

03/09/2026
Visual Studio'da Çözüm Bazlı Renk Teması Nasıl Ayarlanır
Aşkın KILIÇ 1

Visual Studio’da Çözüm Bazlı Renk Teması Nasıl Ayarlanır

02/09/2026

3 comments

comments user
Ahmet Y. 24/08/2026 16:03

mssql-python’da context manager desteği gerçekten can kurtarıcı, eski kodlarda finally bloklarıyla uğraşmak zorunda kalıyorduk. Transaction’ların otomatik rollback yapması da özellikle production ortamında kritik bir özellik. Bu arada şu yazınız da güzeldi: TypeScript 7 Aralık 2025: Native Port Nerede? — https://www.askinkilic.com.tr/typescript-7-aralik-2025-native-port-nerede/

Yanıtla
comments user
Yasemin İ. 24/08/2026 20:55

Context manager kullanmadan önce bağlantıları manuel kapatmayı unutup kaynak sızıntısına yol açtığım çok oldu. with bloğunun bunu otomatik halletmesi gerçekten büyük kolaylık. mssql-python’un bu desteği yerleşik olarak sunması da güzel, pyodbc’de bazen ekstra uğraşmak gerekiyordu.

Yanıtla
comments user
Nilay K. 25/08/2026 01:26

Context manager olmadan bağlantı yönetimi gerçekten baş ağrısına dönüşüyor, özellikle hata durumlarında açık kalan cursor’lar can sıkıyor. mssql-python bu konuda düzgün davranıyorsa iyi haber. Bu arada şu yazınız da güzeldi: TypeScript 7 Aralık 2025: Native Port Nerede? — https://www.askinkilic.com.tr/typescript-7-aralik-2025-native-port-nerede/

Yanıtla

Yorum gönder Yanıtı iptal et

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • Gemini 3.8 Flash GitHub Copilot'ta Kullanıma Sunuldu
    03/09/2026 Gemini 3.8 Flash GitHub Copilot’ta Kullanıma Sunuldu
  • Kubernetes v1.37 HPA ile İş Yüklerini Sıfıra İndiriyor
    03/09/2026 Kubernetes v1.37 HPA ile İş Yüklerini Sıfıra İndiriyor
  • Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
    03/09/2026 Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
  • GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
    03/09/2026 GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
  • Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad
    03/09/2026 Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad
  • Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
    11/04/2026 Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
    07/04/2026 GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
  • GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
    03/04/2026 GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

SİZİN İÇİN DERLEDİK

Gemini 3.8 Flash GitHub Copilot'ta Kullanıma Sunuldu
Microsoft Azure Yapay Zeka

Gemini 3.8 Flash GitHub Copilot’ta Kullanıma Sunuldu

03/09/2026 Aşkın KILIÇ
Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
Bulut Altyapı Geliştirici Araçları Veri & Analitik

Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü

03/09/2026 Aşkın KILIÇ
GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
Bulut Altyapı Geliştirici Araçları Yapay Zeka

GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor

03/09/2026 Aşkın KILIÇ
Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad
Kurumsal Teknoloji Yapay Zeka

Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad

03/09/2026 Aşkın KILIÇ
Visual Studio'da Çözüm Bazlı Renk Teması Nasıl Ayarlanır
Geliştirici Araçları Microsoft Azure

Visual Studio’da Çözüm Bazlı Renk Teması Nasıl Ayarlanır

02/09/2026 Aşkın KILIÇ
SPFx Dev Skills: Ajanların Bildiği ve Kaçırdığı Detaylar
DevOps Geliştirici Araçları Yapay Zeka

SPFx Dev Skills: Ajanların Bildiği ve Kaçırdığı Detaylar

02/09/2026 Aşkın KILIÇ
Microsoft Entra ID için Bicep Şablonları Genel Kullanıma
DevOps Güvenlik & Kimlik Microsoft Azure

Microsoft Entra ID için Bicep Şablonları Genel Kullanıma

02/09/2026 Aşkın KILIÇ
Kubernetes v1.37: etcd RangeStream ile Bellek Dostu Liste
Bulut Altyapı Konteyner & Kubernetes

Kubernetes v1.37: etcd RangeStream ile Bellek Dostu Liste

02/09/2026 Aşkın KILIÇ
Visual Studio'da GitHub Pull Request İnceleme Rehberi
DevOps Geliştirici Araçları Yapay Zeka

Visual Studio’da GitHub Pull Request İnceleme Rehberi

01/09/2026 Aşkın KILIÇ
Python in Visual Studio Code – November 2025 Release
Bulut Altyapı Geliştirici Araçları

Python in Visual Studio Code – November 2025 Release

01/09/2026 Aşkın KILIÇ
Azure SRE Agent'ı Connector Namespace ile Güçlendirmek
Bulut Altyapı Microsoft Azure Yapay Zeka

Azure SRE Agent’ı Connector Namespace ile Güçlendirmek

01/09/2026 Aşkın KILIÇ
Enterprise Live Migrations is now in public preview
Bulut Altyapı DevOps

Enterprise Live Migrations is now in public preview

01/09/2026 Aşkın KILIÇ

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları ASP.NET Core Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps azure sdk Azure SQL bulut bilişim C++ CI/CD CodeQL code review copilot Copilot CLI DevOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Foundry otomasyon performans Pull Request RAG SEO uyumlu verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka yapay zeka ajanları Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 432 yazı 🏗️ Bulut Altyapı 345 yazı 🤖 Yapay Zeka 289 yazı 🔧 DevOps 242 yazı ☁️ Microsoft Azure 231 yazı 🔒 Güvenlik & Kimlik 199 yazı 🏢 Kurumsal Teknoloji 83 yazı 📊 Veri & Analitik 62 yazı 🐳 Konteyner & Kubernetes 53 yazı 📧 Microsoft 365 22 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← TypeScript 7 Aralık 2025: Nati...
    Track organization code qualit... →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS