Merhaba Arkadaşlar,
Mobilhanem.com da Python Derslerine Python ile Veritabanı İşlemleri (SQLite) yazısı ile birlikteyiz. Bu yazı da Python ile veritabanında CRUD işlemlerini yapacağız.
Neden SQLite?
Neden SQLite? Sorusuna cevap vermeden önce SQLite nedir sorusuna cevap verelim.
SQLite; C ve C++ programlama dilleriyle yazılmış açık kaynaklı bir Veritabanı Yönetim Sistemidir. Ayrıca SQLite sunucu yazılımı ve yapılandırma gereksinimi olmayan bir SQL veritabanı yönetim sistemidir.
Şimdi Neden SQLite sorusuna cevap verelim. SQLite’ı diğer veritabanı motorlarından ayıran başlıca özellikle basit olmasıdır.
- Basit Yönetim
- Basit İşletim
- Daha büyük programların içine basit entegrasyon
- Basit sürdürülebilirlik
- Her şeyden önce Sqlite Python’un 2.5 sürümlerinden bu yana bu dilin bir parçasıdır. Dolayısıyla eğer kullandığınız Python sürümü 2.5 veya üstü ise Sqlite’ı Python’daki bir modül gibi içe aktarabilir ve kullanmaya başlayabilirsiniz.
İşte bu yüzden SQLite birçok kullanıcı için küçük ve hızlı olması nedeniyle tercih edilmektedir.
SQLite veritabanı görsel olarak incelemek veya herhangi bir işlemi manuel olarak yapmak için SQLite DB Browser bu adresten bilgisayarınıza uygun olanı indirebilirsiniz. Merak etmeyin kurulumu çok basittir.
İlk önce SQLite3 modülünü ekleyelim.
import sqlite3
Python da SQLite veritabanını eklemek işte bu kadar basit. Şimdi veritabanını eklediğimize göre veritabanı bağlantısı yapalım bunun içinde connect() metodunu kullanıyoruz.
database_connect = sqlite3.connect("sınıf.db")
Bu şekilde veritabanı bağlantısını yapmış oluyoruz. Eğer veritabanı yoksa sınıf.db adında yeni bir veritabanı oluşturmuş olacağız.
Şimdi üzerinde işlem yapacağımız veritabanı için bir cursor(imleç veya işaretleyici) oluşturuyoruz. Bunun için cursor() metodunu kullanıyoruz.
imlec = database_connect.cursor()
Şimdi veritabanı işlemlerini yapalım.
CRUD İşlemleri
NOT: SQL ile ilgili Temel Komutlar ve Örnekler için veya Sıfırdan SQL öğrenmek için tıklayınız.
Create
Tablo oluşturmak için önceden oluşturduğumuz imleç nesnesini kullanarak execute() metodunu ile tablo üzerinde işlem yapabiliriz. O zaman hemen oluşturalım tablomuzu.
imlec.execute("""CREATE TABLE ogrenciler(ogr_no INTEGER ,ogr_adi TEXT,ogr_soyadi TEXT,ogr_bolum TEXT)""")
Dikkat ederseniz sınıf.db isminde bir veritabanı oluşturmuş olduk. Şimdi veritabanımızı açalım. Bunun için daha önce bilgisayarımıza kurduğumuz SQLite DB Browser kullanıyoruz.
Gördüğünüz gibi öğrenciler tablomuzu oluşturduk. Şimdi oluşturduğumuz tabloya veri ekleyelim.
imlec.execute("""INSERT INTO ogrenciler VALUES(12,"Mustafa","GEZEN","Bilgisayar Mühendisliği") """)
Dikkat ederseniz oluşturduğumuz veritabanındaki sıralama ile aynı şekilde ekliyoruz. Şimdi programı çalıştıralım.
import sqlite3 database_connect = sqlite3.connect("sınıf.db") imlec = database_connect.cursor() imlec.execute("""CREATE TABLE ogrenciler(ogr_no INTEGER ,ogr_adi TEXT,ogr_soyadi TEXT,ogr_bolum TEXT)""") imlec.execute("""INSERT INTO ogrenciler VALUES(12,"Mustafa","GEZEN","Bilgisayar Mühendisliği") """)
sqlite3.OperationalError: table ogrenciler already exists.
Şu şekilde bir hata aldık. Bu hata bize zaten ogrenciler tablosunun olduğunu söylüyor. O zaman bizde eğer bu isimde bir tablomuz varsa yeni tablo oluşturma eğer yoksa oluştur tarzında bir kontrol yapmamız gerekiyor. Bunun için SQL de olan şu ifadeyi tablo oluştururken kullanıyoruz. “IF NOT EXISTS”
Hemen kodumuzu güncelleyelim.
imlec.execute("""CREATE TABLE IF NOT EXISTS ogrenciler(ogr_no INTEGER ,ogr_adi TEXT,ogr_soyadi TEXT,ogr_bolum TEXT)""")
Şimdi programı çalıştıralım ve veritabanımıza bakalım.
Gördüğümüz gibi veritabanımız hala boş Çünkü biz veritabanı üzerinde yaptığımız değişiklikleri kaydetmedik bunun için veriler eklenmedi.
Biz veritabanı üzerinde yaptığımız değişiklikleri kaydetmek için commit() komutunu kullanıyoruz. Son olarak unutmadan veritabanını kapatıyoruz. Bunun içinde close() metodunu kullanıyoruz.
import sqlite3 database_connect = sqlite3.connect("sınıf.db") imlec = database_connect.cursor() imlec.execute("""CREATE TABLE IF NOT EXISTS ogrenciler(ogr_no INTEGER ,ogr_adi TEXT,ogr_soyadi TEXT,ogr_bolum TEXT)""") imlec.execute("""INSERT INTO ogrenciler VALUES(12,"Mustafa","GEZEN","Bilgisayar Mühendisliği") """) database_connect.commit() database_connect.close()
Şimdi tablomuza bakalım.
Eğer her seferinde veritabanı kapatmakla uğraşmak istemiyorsanız otomatik kapatmasını istiyorsanız şu yöntemi kullanabilirsiniz.
with sqlite3.connect("sınıf.db") as database_connect : imlec = database_connect.cursor() imlec.execute("""CREATE TABLE IF NOT EXISTS ogrenciler(ogr_no INTEGER ,ogr_adi TEXT,ogr_soyadi TEXT,ogr_bolum TEXT)""") imlec.execute("""INSERT INTO ogrenciler VALUES(12,"Mustafa","GEZEN","Bilgisayar Mühendisliği") """) database_connect.commit()
Kesinlikle size bu yöntemi kullanmayı tavsiye ederim.
Read
Yukar da veritabanı nasıl oluştulur ve nasıl veri eklenir onu öğrendik sıra geldi verileri okumaya bunun için temel SQL komutu olan “SELECT *FROM tablo_adı” şeklinde verilerimizi okuyoruz.
imlec.execute("""SELECT *FROM ogrenciler""")
Şimdi imleç nesnemiz öğrenciler tablosunu okuyacak peki nasıl okuma işlemi yapacak bunu belirtmemiz lazım. Bunun için bazı komutlarımız var.
fetchall() Metodu: Tablodaki bütün verileri okur
fetchmany() Metodu: Tablodan istediğimiz kadar veri okumayı sağlar
fetchone() Metodu: Tablodan verileri tek tek okumayı sağlar
Tüm verileri okuyalım bunun için ben okuduğum verileri öğrenciler değişkenine atıyorum. Ve ekrana yazdıralım.
ogrenciler = imlec.fetchall() print(öğrenciler)
Çıktımıza bakalım;
[(12, 'Mustafa', 'GEZEN', 'Bilgisayar Mühendisliği'), (10, 'Ahmet', 'KARA', 'Elektrik Elektronik Mühendisliği'), (5, 'Ayşe', 'DEREN', 'Matematik Bölümü'), (23, 'Ayhan', 'GEZGİN', 'İstatistik Bölümü'), (16, 'Can', 'ATEŞ', 'Yazılım Mühendisliği'), (36, 'Canan', 'Kayalı', 'Bilgisayar Mühendisliği'), (12, 'Mustafa', 'GEZEN', 'Bilgisayar Mühendisliği')] Gördüğünüz gibi tüm verileri bir listenin içinde okuduk. Dilerseniz şimdi daha düzgün şekilde okuyalım. (12, 'Mustafa', 'GEZEN', 'Bilgisayar Mühendisliği')(10, 'Ahmet', 'KARA', 'Elektrik Elektronik Mühendisliği')(5, 'Ayşe', 'DEREN', 'Matematik Bölümü')(23, 'Ayhan', 'GEZGİN', 'İstatistik Bölümü')(16, 'Can', 'ATEŞ', 'Yazılım Mühendisliği')(36, 'Canan', 'Kayalı', 'Bilgisayar Mühendisliği')
Gördüğünüz gibi tüm verileri bir liste içinde okuduk. Dilerseniz verileri biraz daha düzgün şekilde okuya biliriz.
ogrenciler = imlec.fetchall() for ogrenci in ogrenciler: print(ogrenci)
(12, 'Mustafa', 'GEZEN', 'Bilgisayar Mühendisliği') (10, 'Ahmet', 'KARA', 'Elektrik Elektronik Mühendisliği') (5, 'Ayşe', 'DEREN', 'Matematik Bölümü') (23, 'Ayhan', 'GEZGİN', 'İstatistik Bölümü') (16, 'Can', 'ATEŞ', 'Yazılım Mühendisliği') (36, 'Canan', 'Kayalı', 'Bilgisayar Mühendisliği')
Biraz daha verileri düzgün okumuş olduk. Şimdi tablodan sadece Bilgisayar Mühendisliği okuyanları okuyalım.
imlec.execute("""SELECT *FROM ogrenciler WHERE ogr_bolum = 'Bilgisayar Mühendisliği' """) ogrenciler = imlec.fetchall() for ogrenci in ogrenciler: print(ogrenci)
(12, 'Mustafa', 'GEZEN', 'Bilgisayar Mühendisliği') (36, 'Canan', 'Kayalı', 'Bilgisayar Mühendisliği')
Update
SQL dilinde veri güncelleme işlemi “UPDATE ” ifadesi ile yapılır.
Updata ifadesinin syntax’ı:
UPDATE tablo_adi SET = sütun1 = yeni_değer, sütun2 = yeni_değer WHERE koşul
Hemen kodlarımızı yazalım.
imlec.execute("""UPDATE ogrenciler SET ogr_no = 15 WHERE ogr_bolum = 'Yazılım Mühendisliği' """)
Yazılım Mühendisliği öğrencilerinin numarasını 15 yaptık. Güncelleme işlemini de yapmış olduk.
Delete
Şimdi veritabanımızda verileri silme işlemi yapalım. SQL dilinde veri silme işlemi “DELETE” ifadesi ile yapılır.
Delete ifadesi syntax’ı:
DELETE FROM tablo_adi WHERE koşul
Hemen yapalım.
imlec.execute("""DELETE FROM ogrenciler WHERE ogr_bolum = 'Bilgisayar Mühendisliği' """)
Gördüğünüz gibi Bilgisayar Mühendisliği okuyan öğrencileri tablodan sildik.
Mobilhanem.com da Python ile Veritabanı İşlemleri(SQLite) dersinin sonuna geldik bir sonraki yazımızda Pyhon ile Veritabanı İşlemleri(MySQL) dersini işleyeceğiz. Eksik yada yanlış gördüğünüz yada anlamadığınız yerler için sayfanın altında yorum bölümünden yada soru-cevap kısmından sorabilirsiniz.
Bütün Python derslerine buradan ulaşabilirsiniz.
65
Yararlı bir konu olmuş. Ellerinize sağlık.
Teşekkür ederiz. Birilerine bir faydamız olması bizi mutlu eder.
imlec.execute(“””UPDATE ogrenciler SET ogr_no = 15 WHERE ogr_adi = ‘Yazılım Mühendisliği’ “””)
ogr_bolum olmayacak mı?
Evet öyle olacak düzelltim şimdi teşekkür ederim 🙂
Merhaba,
Paylaşımlarınız için teşekkür ederim. Kısa ve anlaşılır bir dille ifade ediyorsunuz. Emeğinize sağlık.
Aşağıdaki dersi göremedim, henüz eklenmemiş olabilir mi?
Pyhon ile Veritabanı İşlemleri(MySQL)
Yakında inşallah 🙂
sql lte ile veritabanı hazırladım androd studio da. veritabanımdaki verilerin sayısını bulup textview e yazdırmak istiyorum nası yapabilirm?
gayet faydalı teşekkürler
Yorumu düzenle
Yorum
Rica ederim takıldığınız bir yer olursa buradan sorabilirsiniz kolay gelsin 🙂
Teşekkürler
Rica ederim takıldığınız bir yer olursaburadan sorabilirsiniz kolay gelsin 🙂
Abi Herkesten İstediğim duayı sana edicem “allah ne muradın varsa versin”
selamun aleyküm python üzerinden hazır olan db. ‘e yeni kişi ekliyebiliyorum lakin update yada insert yapamıyorum yardımcı olabilirmisiniz ?
Merhaba iyi günler
raceback (most recent call last):
File “c:\Users\Burak\Desktop\1233132321132\Burak.py”, line 2, in
imlec = database_connect.cursor()
NameError: name ‘database_connect’ is not defined
cursor() dan sonra böyle bi hata alıyorum yardım edebilir misiniz?
Merhaba Bursk, biraz geç cevap olmuş ama bende aynı hatayı aldım sonra baktım name error yazıyor ismine baktım ve isminde türkçe karakter kullanmamalısın yani eğitimde gösterilen “sınıf.db” yerine “sinif.db” yazarsan sorun çözülür. Eğitmenimiz galiba utf-8 kodunu yazmış o yüzden olabilir.