Python ve MySQL
Python ve MySQL, modern yazılım geliştirme ve sistem mimarisinde güçlü bir kombinasyon sunar. Python, basit ve anlaşılır sözdizimi, geniş kütüphane ekosistemi ve esnek veri yapılarıyla hızlı prototip geliştirmeyi ve ölçeklenebilir uygulamalar inşa etmeyi mümkün kılar. MySQL ise güçlü, güvenilir ve yaygın olarak kullanılan ilişkisel bir veritabanı yönetim sistemidir ve verilerin kalıcı olarak depolanmasını sağlar. Python ile MySQL’i birleştirerek, yüksek performanslı, güvenli ve sürdürülebilir backend çözümleri tasarlamak mümkündür.
Bu ikili, özellikle web uygulamaları, finansal sistemler, ERP çözümleri ve dağıtık sistemlerde veri yönetimi gereken durumlarda kullanılır. Yazılım geliştirici, bağlantı yönetimi, işlem kontrolleri ve güvenli sorgular gibi kritik konulara dikkat ederek uygulamaların sağlamlığını artırabilir.
Bu eğitimde okuyucu şunları öğrenecektir:
- Python ile MySQL bağlantısı kurmayı ve yönetmeyi
- CRUD operasyonlarını güvenli veri yapılarıyla gerçekleştirmeyi
- Algoritmalar ve veri yapıları kullanarak veri manipülasyonunu optimize etmeyi
- OOP prensipleri ile veri erişim mantığını modüler hale getirmeyi
- Hafıza sızıntısı, hatalı hata yönetimi ve verimsiz sorgulardan kaçınmayı
Bu bilgiler, yüksek standartlarda performans, ölçeklenebilirlik ve güvenlik sunan profesyonel backend uygulamaları geliştirmek için kritik öneme sahiptir.
Temel Örnek
pythonimport mysql.connector
def baglanti_olustur():
try:
conn = mysql.connector.connect(
host="localhost",
user="root",
password="sifre",
database="firma"
)
return conn
except mysql.connector.Error as e:
print(f"Bağlantı hatası: {e}")
return None
def calisanlari_getir():
conn = baglanti_olustur()
if conn is None:
return \[]
try:
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT id, isim, pozisyon FROM calisanlar")
return cursor.fetchall()
except mysql.connector.Error as e:
print(f"Sorgu hatası: {e}")
return \[]
finally:
if conn.is_connected():
conn.close()
if name == "main":
liste = calisanlari_getir()
for calisan in liste:
print(f"ID: {calisan\['id']} | İsim: {calisan\['isim']} | Pozisyon: {calisan\['pozisyon']}")
Bu örnek, Python ile MySQL arasında temel bir bağlantı ve veri sorgulama işlemi gerçekleştirir. baglanti_olustur
fonksiyonu, veritabanı bağlantısını merkezi olarak yönetir ve hataları try/except
bloğu ile yakalar. Bu yapı, bağlantı hatalarını güvenli bir şekilde yönetmeyi sağlar.
calisanlari_getir
fonksiyonu, bağlantıyı alır ve SQL sorgusu ile çalışan bilgilerini listeler. dictionary=True
parametresi, sonuçları Python sözlükleri olarak döndürür ve veri manipülasyonunu kolaylaştırır. finally
bloğu, bağlantının her durumda kapanmasını sağlayarak hafıza sızıntılarını önler.
Bu yapı, backend mimarisinde veri erişim katmanının güvenli ve modüler bir şekilde tasarlanmasına örnektir. Örneğin bir ERP sisteminde, çalışan, ürün veya fatura bilgilerini benzer bir yöntemle yönetmek mümkündür. Bu örnek, veri yapıları ve algoritmaların etkin kullanımını, hata yönetimini ve kaynakların doğru kapatılmasını göstermektedir.
Pratik Örnek
pythonimport mysql.connector
class CalisanDB:
def init(self, host, user, password, database):
self.config = {
"host": host,
"user": user,
"password": password,
"database": database
}
def _baglan(self):
return mysql.connector.connect(**self.config)
def calisan_ekle(self, isim, pozisyon):
conn = self._baglan()
try:
cursor = conn.cursor()
cursor.execute(
"INSERT INTO calisanlar (isim, pozisyon) VALUES (%s, %s)",
(isim, pozisyon)
)
conn.commit()
except mysql.connector.Error as e:
print(f"Ekleme hatası: {e}")
conn.rollback()
finally:
conn.close()
def pozisyona_gore_getir(self, pozisyon):
conn = self._baglan()
try:
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT id, isim, pozisyon FROM calisanlar WHERE pozisyon=%s", (pozisyon,))
return cursor.fetchall()
except mysql.connector.Error as e:
print(f"Sorgu hatası: {e}")
return []
finally:
conn.close()
if name == "main":
db = CalisanDB("localhost", "root", "sifre", "firma")
db.calisan_ekle("Ali Yılmaz", "Mühendis")
sonuc = db.pozisyona_gore_getir("Mühendis")
for c in sonuc:
print(f"\[{c\['id']}] {c\['isim']} - {c\['pozisyon']}")
Gerçek projelerde, veri erişim mantığını sınıflar içinde kapsüllemek ve OOP prensiplerini uygulamak önemlidir. CalisanDB
sınıfı, bağlantı ve CRUD işlemlerini soyutlayarak kodun modülerliğini ve bakımını kolaylaştırır.
calisan_ekle
yöntemi, SQL INSERT işlemini güvenli şekilde gerçekleştirir ve hata durumunda rollback
ile veritabanı tutarlılığı korunur. pozisyona_gore_getir
metodu, verileri Python sözlükleri olarak döndürür ve işleme veya algoritmalar için kullanılabilir. Bu yaklaşım, DAO veya Repository tasarım desenleri ile genişletilebilir ve mikroservis mimarisinde her sınıfın tek bir kaynak yönetmesini sağlar. Ayrıca, bağlantı havuzu ve indeksleme gibi optimizasyonlar uygulanabilir.
En iyi uygulamalar ve yaygın hatalar:
- SQL sorgularında parametre kullanarak SQL enjeksiyonundan kaçının.
- Bağlantıları her zaman kapatın ve
try/except/finally
blokları kullanın. - Doğru veri yapıları kullanın (listeler, sözlükler) ve algoritmaları optimize edin.
WHERE
veLIMIT
kullanarak sorgu verimliliğini artırın.-
OOP prensiplerini kullanarak sorumlulukları ayırın ve bakım kolaylığı sağlayın.
Yaygın hatalar: -
Bağlantıları kapatmamak ve hafıza sızıntısına yol açmak.
- Sorgu için string birleştirme kullanmak.
commit
unutmak ve işlemleri eksik bırakmak.- Python’da filtreleme yapmak yerine SQL optimizasyonu yapmamak.
Performans ve güvenlik ipuçları: MySQL logları, Python logging, indeksleme ve kullanıcı izinleri minimuma indirilmeli, şifreler ortam değişkenlerinde saklanmalıdır.
📊 Referans Tablosu
Element/Concept | Description | Usage Example |
---|---|---|
Bağlantı | Python ile MySQL bağlantısı kurar | mysql.connector.connect(**config) |
Cursor | Sorgu yürütmek için arayüz | cursor.execute("SELECT * FROM calisanlar") |
SQL Parametreleri | SQL enjeksiyonunu önler | cursor.execute("WHERE id=%s", (id,)) |
Commit/Rollback | İşlemleri doğrular veya geri alır | conn.commit(), conn.rollback() |
OOP ve DB | CRUD işlemlerini sınıflarda yönetir | class CalisanDB: metodlar |
Python ve MySQL entegrasyonu, verimli ve güvenli backend uygulamaları geliştirmek için kritik bir beceridir. Bu eğitimde bağlantı yönetimi, sorgulama, transaction kontrolü ve veri yapılarının etkin kullanımı anlatıldı. OOP ile mantığı sınıflara ayırmak modülerlik ve ölçeklenebilirlik sağlar.
Öğrenilenler, SQLAlchemy gibi ORM’ler, indeksleme, mikroservis mimarileri ve güvenlik uygulamalarıyla daha ileri düzey projelere uygulanabilir. Küçük bir envanter yönetimi veya rezervasyon sistemi projesi yaparak bu bilgileri pratiğe dökmek önerilir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu konudaki anlayışınızı pratik sorularla test edin.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek