# Python MySQL Veritabanı

Python MySQL veritabanı işlemlerini öğreniyoruz.

MySQL, programlamada en yaygın kullanılan ve en popüler ilişkisel veritabanı yazılımıdır. Sektörün önde gelen firmalarının neredeyse tamamına yakını MySQL ile beraber çalışır vaziyetteler. Hem bu sebeple hem de sunduğu güçlü çözümlerle bizde bu dersimizde MYSQL ve Python ilişkisini anlatacağız.

MySQL kullanan siteler

1. MySQL Avantajları

  • Açık kaynak kodludur ve ücretsizdir. (Ücretli versiyonu da mevcuttur)

  • Farklı karakter setlerini (iso8859-9, utf-8, latin-5 …) destekler

  • Çok esnek ve güçlü bir kullanıcı erişim kısıtlama/yetkilendirme sistemine sahiptir

  • Güvenlik açısından kendini kanıtlamıştır

  • Döküman ve eğitim konusunda geniş kaynağa sahiptir

  • Birçok programlama dili ve platformla birlikte kullanılabilir.

2. Veritabanı İşlemleri

MySQL veritabanı yazılımını Python ile birlikte nasıl kullanacağımızı aşama aşama görelim.

2.1 Kütüphanenin Kurulması ve Projeye Dahil Etme

MySQL ile veritabanı işlemlerimizi rahatça yapabilmemiz için PyMySql kütüphanemizi projemize dahil etmemiz gerekiyor.

import pymysql.cursors

Eğer kütüphane bilgisayarınızda kurulu değilse pip kullanarak bilgisayarınıza yükleyebilirsiniz.

pip install PyMySQL

2.2 MySQL Veritabanı Bağlantısı

Artık veritabanımıza bağlantımızı yapacak bilgileri oluşturmanın zamanı geldi. Bunun için aşağıdaki kod blokunu ekleyerek kullanıcı adı, şifre ve veritabanı adını kendinize göre düzenlemelisiniz:

# Veritabanı bağlantı bilgileri
db = pymysql.connect(host='localhost',
user='dbkullaniciadi',
password='dbparolasi',
db='dbadı',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)

2.3 İmleç Oluşturma

Veritabanına bağlandıktan sonra üzerinde işlem yapabilmek için cursor() fonksiyonu ile imleç oluşturmamız gerekiyor.

imlec = db.cursor()

Eğer bilgiler doğruysa python dosyanızı çalıştırdığınızda bir hata almamanız gerekiyor. Boş bir çıktı görüyorsanız ilk iki aşamayı başarıyla geçtiniz demektir:

Başarılı İşlem

2.4 ~SELECT~ ile Tablodaki Verileri Seçmek

En çok kullanılan komut olan SELECT ile başlayalım. Bunun için ilk önce veritabanımızda örnek bir tablo oluşturalım. Örnek olarak kullanicilar isimli tabloyu oluşturmak ve basit olması için sadece id, ad, yas sütunlarını kullanmak istiyorum. İlk başta örnek olarak 2-3 tane veride ekleyebilirsiniz:

kullanicilar isimli tablo

Tablomuz ve örnek verilerimiz hazırsa sorgu kodumuzu hemen gönderelim:

imlec.execute('SELECT * FROM kullanicilar')

Bu isteğin ardından dönen sonuçları (dizi olarak döner) bir değişkene aktarmamız gerekiyor. Bunun içinde aşağıdaki gibi bir eşitleme yapıyoruz:

kullanicilar = imlec.fetchall()

Artık tablomuzdaki kullanıcılarımızı bir değişkene atadık ve sıra ekrana yazdırmaya geldi. Bunun için foreach döngümüzü kullanarak dönen diziyi ekrana yazdırıyoruz:

for i in kullanicilar:
print(i)

Ekran çıktımız şu şekilde olacaktır:

Döngü sonucu

Eğer dönen sonuçları daha detaylı kullanmak istiyorsanız sütun isimlerini kullanarak ekrana yazdırabilirsiniz. Bunun için:

for i in kullanicilar:
print("Ad: " + i['ad'] + " --- " + "Yaş: " + str(i['yas']) )

Ekran çıktımız şu şekilde olacaktır:

Özet olarak execute fonksiyonu ile hangi komutu gönderirseniz dönen sonuçlar komutun çıktısı olacaktır. Sizlerde istediğiniz komutları yukarıdaki örnekteki gibi gönderebilirsiniz.

2.5 ~INSERT~ ile Yeni Veri Ekleme İşlemi

Tablomuza yeni bir kullanıcı eklemek istediğimizde kullanmamız gereken kod INSERT komut yapısı aşağıdaki gibidir:

sonuc = imlec.execute('INSERT INTO kullanicilar VALUES(%s,%s,%s)',(None,'Özlem',25))
db.commit()
print(str(sonuc) + " kullanıcı eklendi")

Sonucumuza bakarsak:

Yukarıdaki kodda %s ile göndereceğimiz değerleri belli ediyoruz. Tablomuzda id,ad ve yas sütunları olduğu için %s ile belirlediğim değişkenleri bir sonraki parametrede yazarak gönderiyoruz. Yani insert işleminin kabaca syntax yapısı şu şekildedir:

imlec.execute = (SQL Komutu,Değişkenler)

Bu fonksiyon çalıştığında etkilenen girdi sayısını da sonuc değişkenimize aktarıyoruz. Bu sonuc değişkeni ile tabloya veri eklenip eklenmediğini kontrol edebilirsiniz. Eğer sonuç 0 ise tabloya eklenememiştir.

En önemli kısmına gelirsek te db.commit() ile yaptığımız değişiklikleri veritabanına ileterek insert işlemini gerçekleştiriyoruz. Eğer commit() işlemini yapmazsanız insert işlemleriniz gerçekleşmez!

Unutmadan söyleyelim ki None değerini tablodaki id sütunumu auto increment ayarladığım için boş gönderiyorum, böylece veri eklediğimde id değeri otomatik olarak 1 artıyor.

2.6 ~UPDATE~ ile Veri Güncelleme İşlemi

Şimdi geldik tablomuzdaki mevcut bir değeri güncellemeye. Bu işlem için UPDATE komutunu kullanacağız. Aşağıdaki örneği hemen incelemeye başlayabilirsiniz

sonuc = imlec.execute('UPDATE kullanicilar SET yas = %s WHERE id = %s',(50,5))
db.commit()
print(str(sonuc) + " kullanıcı güncellendi")

Bu işlemin sonucunda ekran çıktılarımız şu şekilde olacaktır:

Gördüğünüz gibi klasik Update komutumuzu gönderdik ve işin kritik noktası olan commit() ile işlemlerimizi başarıyla tamamladık. Artık sıradaki işlemimize geçebiliriz.

Tablomuzdaki kayıt başarıyla silinmiş.

2.7 ~DELETE~ ile Veri Silme

Tablomuz üzerindeki bir veriyi silmek için DELETE sql komutunu kullanmalıyız. Örnek olarak aynı tablo üzerinde yer alan Yunus kullanıcısını silelim.

sonuc = imlec.execute('DELETE FROM ogrenciler WHERE ad= %s',('Yunus'))
db.commit()

2.8 Veritabanı Bağlantısını Kapatmak

Veritabanı üzerindeki işlerinizi tamamladığınızda veritabanı bağlantısını sonlandırmak için close() fonksiyonunu kullanmalısınız.

db.close()

3. Özet

Tüm işlemleri kısaca özetlersek sırasıyla şu işlemleri yapmalısınız.

  1. pymysql.cursors modülünü projenize dahil edin

  2. Veritabanınızı connect() fonksiyonu ile bağlayın

  3. cursor() fonksiyonu ile imleç oluşturun

  4. Sql komutlarınızı execute() fonksiyonu ile işletin.

  5. Veritabanınızda değişiklik olacaksa commit() edin.

  6. Veritabanı bağlantınızı close() ile sonlandırın.