Python ile Veritabanı İşlemleri #1

Bu bölümde sizlere Python’da veritabanı işlemlerinin nasıl gerçekleştiğinden bahsedeceğim. Bu yazı kapsamında SQLITE ile veritabanı işlemleri gerçekleştirilecektir. SQLITE kullanmamızın sebebi, herhangi bir sunucuya ek bağlantı yapmadan SQL sorgularını hızlı ve taşınabilir dosya sistemlerinde kullanabilmektir. SQLITE veritabanı oldukça güçlü bir veritabanıdır. Burada kullanacağımız SQL sorgularını web sitemizde yer alan “SQL İle Veritabanı İşlemleri” yazılarında detaylı bir şekilde inceleyebilirsiniz. İlk olarak SQLITE bağlantısının nasıl yapılacağından bahsedelim.

Python’da SQLITE Bağlantısı Kurma

Python ile veritabanı işlemlerini gerçekleştirebilmek için SQLITE veritabanı ile ilk olarak bağlantı kurmamız gerekir. Bunun için SQLITE modülünü aşağıdaki gibi Python’a çağırmalıyız.

İmport sqlite3

Artık SQLITE veritabanına Python ile erişim sağlayabiliriz. Eğer kullandığımız SQLITE modülünün versiyonunu öğrenmek istersek aşağıdaki kodu kullanabiliriz.

INPUT: 

sqlite3.version


OUTPUT:

2.6.0

Veritabanı Oluşturma

Şimdi ise veritabanımızı oluşturalım. Bunun için aşağıdaki kod kullanılabilir.

musteriler = sqlite3.connect(“musteriler.sqlite”)

sqlite3.connect() fonksiyonu hem var olan bir veritabanına bağlanmak hem de yeni bir veritabanı oluşturmak için kullanılır. Ben burada Jupyter tabanlı Google Colab’ta kodları yazdığım için eğer var olan bir veritabanına bağlanmak isteseydim Google Drive’a veritabanı dosyasını yüklemem gerekirdi. Google Colab’ta kullandığınız Google hesabınız ile Google Drive’deki hesabınızın aynı olmasına ve bağlantı kurmuş olduğunuza dikkat ediniz.

Eğer var olan bir veritabanına bağlanmak isteseydim, veritabanının bulunduğu yolu sqlite3.connect() içerisine yazmam gerekirdi. Ben burada musteriler adlı yeni bir veritabanı oluşturdum. Eğer ki veritabanınızı istediğiniz yere kurmak istiyorsanız, kurmak istediğiniz yerin dosya yoluna veritabanı adınızı ekleyip sqlite.connect() içerisine yazabilirsiniz. Örnek olarak:

sqlite3.connect(“D:/ … /yeni klasör/veritabanım.db”)

Bu işlemin ardından veritabanımız oluşturuldu. Veritabanı üzerinde işlem yapabilmek için imleç tanımlamamız gerekir. Bu imleci tanımlamak için cursor() özelliği kullanılabilir. Veritabanımız üzerinde işlem yapabilmek için imleç oluşturalım.

imlec = musteriler.cursor()

Veritabanına Tablo Ekleme

Yukarıdaki işlemlerin ardından artık veritabanımızda sorgular ile işlemler gerçekleştirebiliriz. Veritabanımızda bir MusteriTablosu isimli bir tablo oluşturalım. Yazdığımız sorgu komutlarının veritabanında çalışması için execute() özelliğini kullanmalıyız.

INPUT: 

imlec.execute('''CREATE TABLE IF NOT EXISTS MusteriTablosu(
                          MusterID INT NOT NULL,
                          MusteriAd  varchar(20),
                          MusteriSoyad varchar(30),
                          MusteriYas TINYINT,
                          MusteriCinsiyet  char(1),
                          MusteriGeliri  Decimal(7,2),
                          MusteriToplamBorc  Decimal(7,2),
                          MusteriTaksitSayisi  TINYINT,
                          MusteriAylikOdeme Decimal(4,2))''')

Yukarıdaki kodda müşterilerimizin bazı bilgilerini tutan bir tablo oluşturduk. Bu tabloyu oluştururken IF NOT EXISTS dememizin sebebi, eğer böyle bir tablo yok ise oluştur demektir. Veritabanında işlemler gerçekleştirirken farkına varmadan yapılabilecek hataların önüne geçmek için kullanılabilir. MusterID sütununun birincil anahtar olduğunu ve boş olamayacağını belirttikten sonra diğer sütunlarımızı ve veri türlerini yazıp kod bloğunu çalıştırdık. Böylece veritabanımızda 9 sütunlu MüsteriTablosu isimli bir tablo oluşturulmuş oldu. Eğer SQLITE daha fazla incelemek isterseniz buraya tıklayarak resmi sayfaya gidebilirsiniz.

Şimdi ise oluşturduğumuz bu tabloya veri girişini sağlayalım. Birden fazla veriyi tek tek girmek yerine bir for döngüsü oluşturalım. Liste içerisine yazdığımız veriler döngü ile veritabanına aktaralım. Bunun için aşağıdaki kod bloğu kullanılabilir.

INPUT:

def  VeriGirisi(veri):
        for veriler in veri:
               imlec.execute(“INSERT INTO MusteriTablosu Values(?,?,?,?,?,?,?,?,?)”,veriler)
               musteriler.commit()
verilerim = [[136752, “Ahmet”, “Yenidoğan”,36,”E”, 4500.00, 3800.00, 6, 633.34], 
             [127650, “Ece”, “Gündüz”, 28,”K”, 3655.00, 1760.00, 4, 440.00], 
             [201638, “Ali”, “Çelik”, 46,”E”, 6500.00, 8900.00, 12, 741.67], 
             [518023, “Gizem”, “Duyar”, 23, “K”, 3500.00, 2750.00, 12, 229.17], 
             [812503, “Aslı”, “Çevik”, 26, “K”, 3000.00, 1650.00, 6, 550.00], 
             [437612, “Mehmet”, “Bekçi”, 35, “E”, 6500.00, 4800.00, 12, 400.00], 
             [356721, “Betül”, “Çevreci”, 26, “K”, 2800.00, 1400.00, 6, 233.34], 
             [971025, “Cenk”, “Kahraman”, 33, “E”, 4250.00, 9800.00, 12, 816.67]]

Yukarıda görüldüğü gibi 8 adet verimiz var. Bu verileri döngü ile veritabanına aktarma işlemini bir fonksiyon olarak tanımladık. Bu fonksiyonu çağırmak ve içerisine verilerin listesini yerleştirmemiz gerekiyor.

VeriGirisi(verilerim)

Yukarıda fonksiyonu tanımlarken imlec.commit() diye bir kod yazdık. Bu kod her veriyi disk üzerine yazmayı sağlar. Girilen veriler sadece bellekte olur ve disk üzerine yazılmaz. Bizde bağlantıyı koparmadan commit() fonksiyonu ile verilerimizi diske yazıyoruz. Eğer veritabanı üzerinde yapacağımız işlemler sonlandıysa veritabanımızı mutlaka kapatmalıyız. Bunun için close() fonksiyonu kullanılabilir.

musteriler.close()

Böylece veritabanımızı kapatmış olduk. Eğer veritabanı üzerinde yeniden işlem yapmak istersek tekrar bağlantı kurmamız gerekir. Veritabanımızın veri girişi yapıldıktan sonraki halini görmek için listeleyelim. Bunun için aşağıdaki kodlar kullanılabilir.

INPUT:

musteriler = sqlite3.connect("musteriler.sqlite")
imlec = musteriler.cursor()
imlec.execute("Select * From MusteriTablosu") 
liste = imlec.fetchall()
print("Müsteriler Listesi")
print("----------------------------------------------------------")
for müsteri in liste:
      print("Müsteri ID : {}\nMüşteri Adı : {}\nMüsteri Soyadı : {}\nMüşteri Yaş : {}\nMüşteri Cinsiyet : {}\nMüşteri Gelir : {}\nMüşterinin Borc : {}\nMüşteri taksit sayısı :{}\nMüşteri Aylık Ödeme : {}".format(müsteri[0], müsteri[1], müsteri[2], müsteri[3], müsteri[4], müsteri[5], müsteri[6], müsteri[7], müsteri[8]))
      print("-----------------------------------------------------")
musteriler.commit()
musteriler.close()










-

OUTPUT:

Müsteriler Listesi
-------------------------------------------
Müsteri ID : 136752
Müşteri Adı : Ahmet
Müsteri Soyadı : Yenidoğan
Müşteri Yaş : 36
Müşteri Cinsiyet : E
Müşteri Gelir : 4500
Müşterinin Borc : 3800
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 633.34
-------------------------------------------
Müsteri ID : 12765
Müşteri Adı : Ece
Müsteri Soyadı : Gündüz
Müşteri Yaş : 28
Müşteri Cinsiyet : K
Müşteri Gelir : 3655
Müşterinin Borc : 1760
Müşteri taksit sayısı :4
Müşteri Aylık Ödeme : 440
                         ...

Veri Çekerken Kullanılabilecek Farklı Fonksiyonlar

Yukarıda yazdığım kod bloğuyla ilk önce veritabanına bağlandım. Ardından veritabanı üzerinde imleç oluşturdum. Bu adımdan sonra veritabanındaki tüm verileri çektim. fetchall() fonksiyonunu kullanarak tüm verileri çağırıp listeye aldım. Eğer burada fetchone() fonksiyonunu kullansaydım verileri tek tek çağırıp listelerdim. fetchone() fonksiyonu her çalıştığında bir sonraki satır listelenir. Bu iki fonksiyonun dışında fetchmany() fonksiyonu bulunur. Bu fonksiyon ile istediğimiz satırı listeyebiliriz.  Yukarıdaki kod bloğunu fetchone() ve fetchmany() ile tekrar çalıştırıp sonuçları görelim.

INPUT:

musteriler = sqlite3.connect("musteriler.sqlite")
imlec = musteriler.cursor()
imlec.execute("Select * From MusteriTablosu") 
liste = imlec.fetchone()
print("Müsteriler Listesi")
print("----------------------------------------------------------")
print("Müsteri ID : {}\nMüşteri Adı : {}\nMüsteri Soyadı : {}\nMüşteri Yaş : {}\nMüşteri Cinsiyet : {}\nMüşteri Gelir : {}\nMüşterinin Borc : {}\nMüşteri taksit sayısı :{}\nMüşteri Aylık Ödeme : {}".format(liste[0], liste[1], liste[2], liste[3], liste[4], liste[5], liste[6], liste[7], liste[8]))
print("----------------------------------------------------------")
musteriler.commit()
musteriler.close()


-
OUTPUT:


Müsteriler Listesi
----------------------------------------------------------
Müsteri ID : 136752
Müşteri Adı : Ahmet
Müsteri Soyadı : Yenidoğan
Müşteri Yaş : 36
Müşteri Cinsiyet : E
Müşteri Gelir : 4500
Müşterinin Borc : 3800
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 633.34
----------------------------------------------------------
INPUT:

musteriler = sqlite3.connect("musteriler.sqlite")
imlec = musteriler.cursor()
imlec.execute("Select * From MusteriTablosu") 
liste = imlec.fetchmany(2)
print("Müsteriler Listesi")
print("----------------------------------------------------------")
for müsteri in liste:
      print("Müsteri ID : {}\nMüşteri Adı : {}\nMüsteri Soyadı : {}\nMüşteri Yaş : {}\nMüşteri Cinsiyet : {}\nMüşteri Gelir : {}\nMüşterinin Borc : {}\nMüşteri taksit sayısı :{}\nMüşteri Aylık Ödeme : {}".format(müsteri[0], müsteri[1], müsteri[2], müsteri[3], müsteri[4], müsteri[5], müsteri[6], müsteri[7], müsteri[8]))
      print("-----------------------------------------------------")
musteriler.commit()
musteriler.close()











-

OUTPUT:


Müsteriler Listesi
-----------------------------------------------
Müsteri ID : 136752
Müşteri Adı : Ahmet
Müsteri Soyadı : Yenidoğan
Müşteri Yaş : 36
Müşteri Cinsiyet : E
Müşteri Gelir : 4500
Müşterinin Borc : 3800
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 633.34
-----------------------------------------------
Müsteri ID : 127650
Müşteri Adı : Ece
Müsteri Soyadı : Gündüz
Müşteri Yaş : 28
Müşteri Cinsiyet : K
Müşteri Gelir : 3655
Müşterinin Borc : 1760
Müşteri taksit sayısı :4
Müşteri Aylık Ödeme : 440
-----------------------------------------------

Bu veritabanı üzerinde daha fazla işlem gerçekleştireceğiz. Ancak bu yazımızın daha fazla uzamaması adına bu veritabanı üzerinde bir tane daha örnek yapıp yazımızı sonlandıralım.

Örnek

MusterID’si 437612 olan müşterinin taksit sayısını 12 aydan 6 aya düşürün ve buna bağlı olan sütunları güncelleyin.

Burada yapmamız gereken MusterID’si  437612 olan Mehmet Bekçi adlı müşterinin taksit sayısını 6 aya indirmektir. Buna bağlı olan aylık ödeme tutarını güncellememiz gerekir. Bunun için update komutunu kullanmamız gerekir.

INPUT:

musteriler = sqlite3.connect("musteriler.sqlite") 
imlec = musteriler.cursor()
imlec.execute("UPDATE MusteriTablosu SET MusteriTaksitSayisi = 6, MusteriAylikOdeme = 800.00  WHERE  MusterID = 437612")
GuncellenmisSatir = imlec.execute("Select * from MusteriTablosu where MusterID = 437612")
GuncellenmisSatir.fetchone()
musteriler.commit()
musteriler.close()



-

INPUT:

musteriler = sqlite3.connect("musteriler.sqlite")
imlec = musteriler.cursor()
imlec.execute("Select * From MusteriTablosu") 
liste = imlec.fetchall()
print("Müsteriler Listesi")
print("----------------------------------------------------------")
for müsteri in liste:
      print("Müsteri ID : {}\nMüşteri Adı : {}\nMüsteri Soyadı : {}\nMüşteri Yaş : {}\nMüşteri Cinsiyet : {}\nMüşteri Gelir : {}\nMüşterinin Borc : {}\nMüşteri taksit sayısı :{}\nMüşteri Aylık Ödeme : {}".format(müsteri[0], müsteri[1], müsteri[2], müsteri[3], müsteri[4], müsteri[5], müsteri[6], müsteri[7], müsteri[8]))
      print("-----------------------------------------------------")
musteriler.commit()
musteriler.close()
OUTPUT:

Müsteriler Listesi
-------------------------------------------
Müsteri ID : 136752
Müşteri Adı : Ahmet
Müsteri Soyadı : Yenidoğan
Müşteri Yaş : 36
Müşteri Cinsiyet : E
Müşteri Gelir : 4500
Müşterinin Borc : 3800
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 633.34
-------------------------------------------
Müsteri ID : 127650
Müşteri Adı : Ece
Müsteri Soyadı : Gündüz
Müşteri Yaş : 28
Müşteri Cinsiyet : K
Müşteri Gelir : 3655
Müşterinin Borc : 1760
Müşteri taksit sayısı :4
Müşteri Aylık Ödeme : 440
-------------------------------------------
Müsteri ID : 201638
Müşteri Adı : Ali
Müsteri Soyadı : Çelik
Müşteri Yaş : 46
Müşteri Cinsiyet : E
Müşteri Gelir : 6500
Müşterinin Borc : 8900
Müşteri taksit sayısı :12
Müşteri Aylık Ödeme : 741.67
-------------------------------------------
Müsteri ID : 518023
Müşteri Adı : Gizem
Müsteri Soyadı : Duyar
Müşteri Yaş : 23
Müşteri Cinsiyet : K
Müşteri Gelir : 3500
Müşterinin Borc : 2750
Müşteri taksit sayısı :12
Müşteri Aylık Ödeme : 229.17
-------------------------------------------
OUTPUT DEVAMI:

Müsteri ID : 812503
Müşteri Adı : Aslı
Müsteri Soyadı : Çevik
Müşteri Yaş : 26
Müşteri Cinsiyet : K
Müşteri Gelir : 3000
Müşterinin Borc : 1650
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 550
-------------------------------------------
Müsteri ID : 437612
Müşteri Adı : Mehmet
Müsteri Soyadı : Bekçi
Müşteri Yaş : 35
Müşteri Cinsiyet : E
Müşteri Gelir : 6500
Müşterinin Borc : 4800
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 800
-------------------------------------------
Müsteri ID : 356721
Müşteri Adı : Betül
Müsteri Soyadı : Çevreci
Müşteri Yaş : 26
Müşteri Cinsiyet : K
Müşteri Gelir : 2800
Müşterinin Borc : 1400
Müşteri taksit sayısı :6
Müşteri Aylık Ödeme : 233.34
-------------------------------------------
Müsteri ID : 971025
Müşteri Adı : Cenk
Müsteri Soyadı : Kahraman
Müşteri Yaş : 33
Müşteri Cinsiyet : E
Müşteri Gelir : 4250
Müşterinin Borc : 9800
Müşteri taksit sayısı :12
Müşteri Aylık Ödeme : 816.67
-------------------------------------------

-

Sonraki yazılarımızda Python ile veritabanı işlemlerine devam edeceğiz.

PYTNBLHO08H3A1G74C