Veritabanı Programlama

Gökhan YAVAŞ
gokhanyavas
Published in
4 min readDec 18, 2016

Merhaba Arkadaşlar, Python’da Veritabanı Programlama (Database Programming) konusunu inceleceğiz. Veritabanı kavramını bir çoğunuzun bildiğini düşünüyorum fakat yinede açıklayalım. Veritabanı, içinde bilgi saklanabilen yapılardır. Tanımı biraz daha genişletirsek: Birbiriyle ilişkili olan verilerin tutulduğu, yönetilebilir, güncellenebilir ve taşınabilir bilgi topluluğudur.
Veritabanı, veritabanı yönetim sistemleri tarafından üretilip yönetilir. Bu sistemlere: MS Access, MySQL, Oracle, MS SQL Server, SQLite verilebilir. Python’da, veritabanı olarak bu sistemlerin hepsini kullanabiliriz. Biz sadeliği ve kullanım kolaylığı nedeniyle SQLite veritabanını kullanacağız.

SQLite

SQLite, ücretsiz ve kullanımı kolay bir veritabanıdır. Python programlama dilinde varsayılan olarak gelmektedir. SQLite, diğer veritabanlarının aksine kurulum, yapılandırma vs gerektirmez. Diğer veritabanlarına nazaran çok basit, öğrenmesi kolay bir yapıdır. SQLite veritabanının böyle olması size yanıltmasın. Bu özelliklerine bakarak yeteneksiz bir DB olduğunu düşünmeyin. Bugün SQLite veritabanını kullanan birçok firma bulunmaktadır. Mesela, Firefox, Google, Apple… Veritabanlarının yapıları genelde excel’e çok benzer. İçersinde tablolar ve isimleri, tabloların içlerinde satırlar ve sütunlar bulunmaktadır.

SQLite veritabanlarımızı yönetmek için çeşitli yardımcı araçlar bulunmaktadır. SQLiteBrowser bunlardan birisidir. Programı ilgili siteden indirip kullanabilirsiniz. Linux kullanıcısıysanız depodan aşağıdaki komut yardımıyla kurulumu yapabilirsiniz:

sudo apt-get install sqlitebrowser

Veritabanlarıyla ilgili genel bilgileri verdiğimize göre Python aracılığıyla nasıl kullanacağımıza geçebiliriz.

Veritabanı Oluşturmak

Python’da sqlite modülünü kullanarak veritabanı oluşturalım. Bir modülü kullanabilmek için öncelikle içeri aktarmamız gerektiğini biliyorsunuz. Bilmeyen ve hatırlamayanlar buraya göz atsın.

import sqlite3

Bu modül yardımıyla veritabanı oluşturmak ve bağlanmak için sqlite modülünün connet() adlı metodundan yararlanıyoruz.

vt = sqlite3.connect('okul.sqlite')

Bu komutu verdiğimizde eğer ogrenci adında bir veritabanı yoksa oluşacaktır. Bu arada .sqlite uzantısı seçtiğimize dikkat edin. Bu tamamen kişisel, kendi zevkinize kalmış birşeydir. Zorunluluk olmadığı gibi, sqlite, sqlite3, db, db3 gibi vs uzantılar seçebilirsiniz.

Sabit bir veritabanı değilde ram üzerinde bir veritabanı oluşturmak isterseniz komutunuz şu şekilde olmalıdır:

vt = sqlite3.connect(':memory:')

disk üzerinde geçici veritabanı oluşturmak isterseniz:

vt = sqlite3.connect('')

Geçici veritabanları oluşturmak, çeşitli testler ve denemler yapmanız durumunda işe yarar.

İmleç Oluşturmak

Veritabanını oluşturup bağlandıktan sonra, veritabanı üzerinde işlem yapabilmek için imleç oluşturmak gerekir. İmleç oluşturmak için cursor() isimli bir metoddan yararlanacağız.

im = vt.cursor()

im nesnesi ile artık execute() metodunu kullanarak SQL komutlarını çalıştırabiliriz.

Tablo Oluşturma

Yukarıdaki anlattıklarımıza uygulayalım:

im.execute("CREATE TABLE ogrenci (isim, soyisim, numara)")

Bu komutla yaptığımız şey, ogrenci isiminde bir tablo oluşturup, bu tabloya, isim, soyisim ve numara adlı 3 sütün oluştur demiş olduk. SQL komutlarıyla ilgili bilginiz yoksa SQL kategorisinden bilgi edinebilirsiniz.

Tabloya Veri Girme

Bu kısıma kadar her şey yolundaysa, oluşturduğumuz tabloya veriler girelim:

o1 = """INSERT INTO ogrenci VALUES ('Gokhan','YAVAS','143')"""
im.execute(o1)

İlgili SQL sorgusunu o1 isimli değişkene atayıp örnekteki gibide kullanabiliriz.

Verilerin İşlenmesi

Herşey verilerin girilmesiyle bitmiyor, bu girilen verilerin işlenmesi için bir adım daha atmamız gerekiyor. Girilen verileri işleyebilmek için commit() isimli bir metottan yararlanacağız.

vt.commit()

commit burada, vt yani bağlantı değişkeninin metotudur.

Veritabanının Kapatılması

Veritabanında işlemlerin tamamlandıktan sonra prensip olarak kapatılması gerekir.Kapatma işlemi için close() metotunu kullanacağız.

vt.close()

Bu şekilde, veritabanı ilk açıldığı andan itibaren, sistemin devreye sokmuş olduğu tüm kaynakları serbest bırakmış olduk.

Parametreli Sorgular

Şu ana kadar veritabanına gireceğimiz bilgileri tek tek elle girdik. Ancak çoğu durumda bu bilgiler dışarıdan gelecek ve biz bunun için nasıl bir yol izliyoruz gelin bakalım:

import sqlite3with sqlite3.connect('okul.sqlite') as vt:
im = vt.cursor()
ogrenci = [('Gokhan', 'Yavas', '143'),
('Aysel', 'Utku', '144'),
('Veli', 'Kon', '145'),
('Burcu', 'Özel', '145')]
im.execute("""CREATE TABLE IF NOT EXISTS ogrenci
(isim, soyisim, numara)""")
for veri in ogrenci:
im.execute("""INSERT INTO ogrenci VALUES
(?, ?, ?)""", veri)
vt.commit()
Bu kodlarda işlenecek veriler, ogrenci isimli bir değişkenden geliyor. Bu verileri nasıl yerleştirdiğimize bakın:
for veri in ogrenci:
im.execute("""INSERT INTO ogrenci VALUES
(?, ?, ?)""", veri)

Tablodaki Verilere Erişim

Yukarıda, bir veritabanı oluşturup nasıl veri ekleyebileceğimizi gördük. Bu kısımda ise, bu eklediğimiz verilere nasıl erişeceğimizi görüp öğreneceğiz. Veritabanında bir bilgiye erişmek için SELECT * FROM tabloisimi şeklinde bir sorgu kullanırız. Yine aynı şekilde bu sorguyu kullanıp veriye erişeceğiz.im.execute('''SELECT * FROM ogrenci''')verimizi seçtiğimize göre, bu veriyi nasıl alacağımızı öğrenelim. Bunun için fetchone(), fetchall() veya fetchmany() adlı metotlardan ya da for döngüsünden faydalanacağız.fetchall() Metoduveriler = im.fetchall()
print(veriler)
Cıktı:
[('Gokhan', 'Yavas', '143'),
('Aysel', 'Utku', '144'),
('Veli', 'Kon', '145'),
('Burcu', 'Özel', '145')]
fetchone() Metodu
Bu metot, veritabanından seçilen verilerin tek tek alınabilmesine izin verir.
im.fetchone()fetchmany() Metodu
Bu metot, seçilen veri üzerinden istenilen kadarına almak için kullanılır.
im.fetchmany(3)bu komut ile seçtiğimiz 3 kayıt getirilir. Veritabanından veri çekmenin yöntemlerini öğrenmiş olduk. Bu metotların dışında bahsettiğimiz for döngüsüyle ilgilide bir örnek verelim:for veri in im:
print(veri)
for döngüsünü imleç üzerinde kurduk. Eğer amaçınız veri sınırlamaksa yukarıda öğrendiğimiz metotları for içinde uygulayabilirsiniz.for i in range(3):
print(im.fetchone())

Veriyi Biçimlendirme

Veritabanından verilere nasıl ulaşacağımızı gördük. Bildiğiniz üzere: SELECT * FROM tabloisimi şeklinde bir sorgu kullanmıştık. Yine aynı sorguyu kullanarak verilerimizi nasıl biçimlendire bileceğimizi göstereceğim.Bu biçimlendirme işlemi için SQL bilgisi olan arkadaşlar bilirler, Where komutunu kullanıyoruz. Yani: SELECT * FROM tabloisimi Where sütünbaslıgı şeklinde bir sorgu kullanacağız. SQL sorgularını yazıp, verileri getirebilmemiz için o veritabanında tablo ve sütün bilgilerini biliyor olmamız gerekir. SQLite veritabanında, tablo isimlerini şu sorgu ile alabiliriz.im.execute("SELECT sql FROM sqlite_master").fetchone()Cıktı:
('CREATE TABLE ogrenci (isim, soyisim, numara)',)
komutu çalıştırdığımızda, ilgili tabloyu oluşturmak için kullanılan SQL komutunun çıktısını aldık. Bunun için SQLiteBrowser yardımcı aracınıda kullanabilirdik. Python'da "#" işareti kodlarımıza yorum eklemek için kullandığımızı biliyorsunuz. SQL kodlarımıza yorum yazmak içinse " - " işaretini kullanırız.
SELECT * FROM tabloisimi --Where sütünbaslıgıÖrneğimizdeki gibi kullandığımızda, sorgu işaretin olduğu kısıma kadar çalışacaktır.

--

--