Merhaba telefonlarda,django yapsında ver bir çok yapıda sqlite veri tabanı kullanılmaktadır. Sqlite veritabanına burandan ulaşbilirsiniz.
Tavsiyem isteseni Sql Browser‘ı kullanmanızdır. Sqlite dosyaları bu programda yüklü gelir ve bu program üzerinden isteğiniz gibi yönetebirlisiniz.
Bu broserı indirip kurduktan sonra kendinize bir tane veritabanı oluşturun. New Database sekmesine tıkladığınızda hemen oluşturulacak yeri sorcaktır.Silerde çalıştığınız bir klasörü yani .py uzantılı dosyalarınızın olduğu klasöre oluşturabiliriniz. Ben bir tane mysqlidb.db adında bir tane oluşturdum ve .py uzantılı dosyamla aynı konumda.
Python sqlite3 modülü python lib içerisinide yüklü gelmektedir. Yani direk sayfanıza import sqlite3
olarak dahil edebilirsiniz.
Öncelikle bağlantı kuralım.
1 2 3 4 5 6 7 8 9 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. print("Bağlantı sağlandı") #Bağlantı sağlandı mesajı mydb.close() #Bağlantıyı Kapattık else: print("Dosya bulunamadı") #dosya bulunamayınca hata verecek. |
Artık veritabanımıza bağlandığımıza göre ilk tablomuzu oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. durum = crs.execute(""" CREATE TABLE "_user" ( "id" INTEGER NOT NULL, "ad" TEXT NOT NULL, "soyad" TEXT NOT NULL, "mail" TEXT NOT NULL, "pass" TEXT NOT NULL, "durum" INTEGER NOT NULL, PRIMARY KEY("id" AUTOINCREMENT) ) """) #Tablo oluşturmak için ilgili sqli yazdık mydb.close() #Bağlantıyı Kapattık else: print("Dosya bulunamadı") |
Oluşturduğumuz tabloya veri girelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. crs.execute("insert into _user values(null,'Çağlar','Bostancı','info@caglarbostanci.com.tr','12345',1)") #SQL sorgumuzu hazırladık. mydb.commit() #SQL sorgumuzu çalıştırdık. if crs.rowcount > 0: #Etkilenen satır sayısını aldın geriye 1 döndü print("Kullanıcı girişi yapıldı") #gelen değer 0 dan fazlaysa veri girildi else: print("Üzgünüm bir hata oluştu") #etkilenen satır yoksa veri girilemedi mydb.close() #Bağlantıyı Kapattık else: print("Dosya bulunamadı") #Kullanıcı girişi yapıldı |
Şimdi sql injection önlemek için yapmamız gerekenleri öğrenelim. Dışarıdan gelen verileri istediğiniz gibi bir fonskiyonla temizleyebilirsiniz.
Bunun yanında verilerin geleceği alan ?,?
gibi parametereler kullanarak verileri güvenliğini almış oluyoruz. Tabi burada tuple veri oluşturmanız
gerektiğini unutmayınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. sql="insert into _user values(null,?,?,?,?,?)" #sql hazırladık veri=('Çağlar','Bostancı','info@caglarbostanci.com.tr','12345',1) #verilerimiz hazırladık crs.execute(sql,veri) #sql çalıştırdık mydb.commit() #SQL sorgumuzu çalıştırdık. if crs.rowcount > 0: #Etkilenen satır sayısını aldın geriye 1 döndü print("Kullanıcı girişi yapıldı") #gelen değer 0 dan fazlaysa veri girildi else: print("Üzgünüm bir hata oluştu") #etkilenen satır yoksa veri girilemedi mydb.close() #Bağlantıyı Kapattık else: print("Dosya bulunamadı") #Kullanıcı girişi yapıldı |
Şimdi ise python sqlite ile veritabanımıza birden çok veri girelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. sql="insert into _user values(null,?,?,?,?,?)" #sql hazırladık veri=[ ('Nazım','Hikmet','nazimhikmet@gmail.com','12345',1), ('Necip Fazıl','Kısakürek','necipfazil@gmail.com','12345',1), ('Ahmet Hamdi','Önal','ahmetarif@gmail.com','12345',1) ] #verilerimiz hazırladık crs.executemany(sql,veri) #burada çoklu veri için executemany() kullandık. mydb.commit() #SQL sorgumuzu çalıştırdık. if crs.rowcount > 0: #Etkilenen satır sayısını aldın geriye 1 döndü print(crs.rowcount,"adet satır etkilendi.") #gelen değer 0 dan fazlaysa veri girildi else: print("Üzgünüm bir hata oluştu") #etkilenen satır yoksa veri girilemedi mydb.close() #Bağlantıyı Kapattık else: print("Dosya bulunamadı") #3 adet satır etkilendi. |
Bazen oluşan hatalarda yapmış olduğumuz kaydı silmemiz gerekebilir bu işlmi .rollback()
yapmaktayız. Yine girdiğmiz bir verinin
id numarasına .lastrowid
ile erişebiliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik try: if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz # mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. db=sqlite3.connect(data) crs=db.cursor() crs.execute("insert into _user values(null,'Çağlar','Bostancı','info@caglarbostanci.com.tr','12345',1)") db.commit() print(crs.lastrowid) #girilen satır sayımızı alıyoruz. raise Exception("Bir hata oluştu") except Exception as hata: db.rollback() print(hata) finally: mydb.close() #Bağlantıyı Kapattık # 7 # Bir hata oluştu |
SQLite tablomuza verilerimizi girdiğimize göre artık tablomuzdaki verileri python sqlite3 modülü ile listeleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. crs.execute("select * from _user") #burada çoklu veri için executemany() kullandık. for satir in crs: print(satir) else: print("Dosya bulunamadı") # (3, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', '12345', 1) # (4, 'Nazım', 'Hikmet', 'nazimhikmet@gmail.com', '12345', 1) # (5, 'Necip Fazıl', 'Kısakürek', 'necipfazil@gmail.com', '12345', 1) # (6, 'Ahmet Hamdi', 'Önal', 'ahmetarif@gmail.com', '12345', 1) |
Yukarıdaki sqlite örneğimizde veritabanındaki verileri cursor döngüsü ile listeledik. Burada yine tek seferde .fetchAll()
metodu ile de alabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. crs.execute("select * from _user") #burada çoklu veri için executemany() kullandık. toplam_veri=crs.fetchall() if len(toplam_veri): print(toplam_veri) else: print("Veri bulunamadı") else: print("Dosya bulunamadı") # [(1, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', '12345', 1), (2, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', '12345', 1), (3, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', '12345', 1), (4, 'Nazım', 'Hikmet', 'nazimhikmet@gmail.com', '12345', 1), (5, 'Necip Fazıl', 'Kısakürek', 'necipfazil@gmail.com', '12345', 1), (6, 'Ahmet Hamdi', 'Önal', 'ahmetarif@gmail.com', '12345', 1)] |
Bu sqlite sorgusunda kullanmış olduğumuz crs.fetchAll()
metodu verileri bir serferde bize bir list olrak döndürdü. İsterseniz bir döngüye sokarakta
ekrana listeleyebilirsiniz.
1 2 3 4 5 6 7 8 9 | if len(toplam_veri): for satir in toplam_veri: print(satir[1],satir[2]) else: print("Veri bulunamadı") # Çağlar Bostancı # Nazım Hikmet # Necip Fazıl Kısakürek # Ahmet Hamdi Önal |
Yine slqlite sorgusundan where şartı kullanarak bir adet veriy fetchone()
metodu ile alabiliriz.
1 2 3 4 5 6 7 8 9 10 11 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. crs.execute("select * from _user where id=?",(1,)) #burada sqlinjection önelemek için ? ile veriyi eşleştirdik print(crs.fetchone()) #tek satır olarak verimizi ekran çekip bastık. else: print("Dosya bulunamadı") #(1, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', '12345', 1) |
Yukarıdaki bir örenğin farklı formatlarınıda aşağıda inceleyebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import sqlite3 #sqlite modülünü dahil ettik import os #dosyamızın yolunu bulmak için os modülünü dahil ettik data=os.getcwd()+os.sep+"mysqlidb.db" #dosyamızın yolunu belirledik if os.path.exists(data): #belirtmiş oluduğumuz veritabanının dizinde var olup olmadınğını kontrol ediyoruz mydb=sqlite3.connect(data) #modül üzerinden dosyamıza bağlanıyoruz. crs = mydb.cursor() # Sorgu çalıştırmak için cursor oluşturyoruz. value=1 crs.execute("select * from _user where id=%i"%value) #burada sqlinjection önelemek için ? ile veriyi eşleştirdik print(crs.fetchone()) #tek satır olarak verimizi ekran çekip bastık. crs.close() #veritabanımızı kapattık else: print("Dosya bulunamadı") #(1, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', '12345', 1) |
Python sqlite3 modülü kullanımı genel olarak öğrenmiş olduk. Daha detaylı bilgiler için Python sqlite3 Modülü sayfasından öğrenebilirisiniz. Başarılar.