Merhaba Arkadaşlar, Mobilhanem.com da Flask Derslerine Flask ile Veritabanı İşlemleri (SQLite) yazısı ile birlikteyiz. Bu yazı da Flask ile veritabanı işlemlerini yapacağız. Bunun için bizde örnek olarak kullanıcı kayıt formu bilgilerini veritabanına kaydetmeyi ve veritabanından bilgileri okumayı işleyeceğiz.
Başlıkta da gördüğünüz gibi veritabanı olarak SQLite son versiyonu SQLite3 üzerinden dersi anlatacağım. Bir sonraki derste iste MySQL ve MongoDB üzerinden anlatacağım. Veritabanı olarak SQLite kullanıp da SQLite hakkında bir iki cümle yazmamak olmaz.
Niçin SQLite?
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. SQLite’ı diğer veritabanı motorlarından ayıran başlıca özelliği basit olmasıdır.
Her şeyden önce SQLite Python’un 2.5 sürümlerinden bu yana Python ile birlikte hazır gelmektedir. Dolayısıyla eğer kullandığınız Python sürümü 2.5 veya üstü ise SQLite’ı Python’daki herhangi bir modül gibi içe aktarabilir ve kullanmaya başlayabilirsiniz. Ayrıca SQLite veritabanını local üzerinde geliştirmekte olduğunuz uygulamalar için çok basit bir şekilde kullanabilirsiniz. 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 projemize dahil edelim.
import sqlite3
Gördüğünüz gibi çok basit bir şekilde SQLite projemize dahil ettik şimdi. Veritabanı oluşturalım ve veritabanı bağlantısı yapalım.
with sqlite3.connect("Register.db") as database:
Bu şekilde eğer veritabanımız yoksa yeni veritabanı oluşturmuş olacağız. Eğer veritabanı varsa zaten yeni veritanı oluşturmayacak veritabanı bağlantısı sağlanmış olacak.
Flask ile Veritabanı İşlemleri
NOT: SQL ile ilgili Temel Komutlar ve Örnekler için veya Sıfırdan SQL öğrenmek için tıklayınız.
Şimdi veritabanı üzerinde CRUD işlemlerimizi yapmak için bir cursor yani imleç oluşturuyoruz. Bunun için cursor() metodunu kullanıyoruz.
cursor = database.cursor()
Şimdi veritabanına verileri kaydetmek için bir tablo oluşturuyoruz.
cursor.execute("CREATE TABLE users(name TEXT,surname TEXT,email TEXT,password TEXT)")
Şimdi verileri ekleyelim bunun için bir önceki dertse WTForms ile oluşturduğumuz formda ki verileri veritabanına ekleyeceğiz.
cursor.execute("INSERT INTO users(name,surname,email,password) VALUES(?,?,?,?)",(name,surname,email,password))
Şimdi veritabanı üzerinde yaptığımız değişiklikleri kaydetmek için commit() metodunu kullanıyoruz.
with sqlite3.connect("Register.db") as database: cursor = database.cursor() cursor.execute("CREATE TABLE users(name TEXT,surname TEXT,email TEXT,password TEXT)") cursor.execute("INSERT INTO users(name,surname,email,password) VALUES(?,?,?,?)",(name,surname,email,password)) database.commit()
Şimdi adım adım kodları inceleyelim. İlk önce kullanıcı kayıt formumuzu oluşturalım;
class UsersForm(Form): name = StringField("İsim",validators=[validators.DataRequired("Lütfen Email giriniz")]) surname = StringField("Soyisim",validators=[validators.DataRequired("Lütfen Email giriniz")]) email = StringField("Email",validators=[validators.DataRequired("Lütfen Email giriniz")]) password = PasswordField("Parola",validators=[validators.DataRequired("Lütfen parola giriniz"), validators.Length(min=6,max=12,message="Lütfen en az 6 en fazla 12 karakter parola giriniz"), validators.EqualTo(fieldname="confirm", message="Parolar uyuşmuyor")]) confirm = PasswordField("Parola tekrar") submit = SubmitField("Kayıt")
Bu şekilde kullanıcı kayıt formumuzu oluşturmuş olduk. Şimdi formumuzu html sayfasına ekleyelim.
<form action="http://127.0.0.1:5000/users" method="post"> {{ form.name.label() }} <br> {{ form.name() }} <br> {{ form.surname.label() }} <br> {{ form.surname() }} <br> {{ form.email.label() }} <br> {{ form.email() }} <br> {{ form.password.label() }} <br> {{ form.password() }} <br> {{ form.confirm.label() }} <br> {{ form.confirm() }} <br> {{ form.submit() }} </form>
Şimdi form sayfasına istek atacak ve bunun karşılığında bize bir register.html sayfasını döndürecek fonksiyonu yazalım.
@app.route("/register", methods =['POST','GET']) def register(): form = UsersForm() return render_template('register.html', form=form)
Çok güzel formumuzu oluşturduk. Şimdi formdan aldığımız bilgileri veritabanına kaydedecek fonksiyonu yazalım.
@app.route("/users", methods =['POST','GET']) def users(): try: if request.method == 'POST': name = request.form.get('name') surname = request.form.get('surname') email = request.form.get('email') password = request.form.get('password') with sqlite3.connect("Register.db") as database: cursor = database.cursor() cursor.execute("CREATE TABLE users(name TEXT,surname TEXT,email TEXT,password TEXT)") cursor.execute("INSERT INTO users(name,surname,email,password) VALUES(?,?,?,?)",(name,surname,email,password)) database.commit() return render_template("new_users.html") except: return render_template("users.html", hata="hata oluştu")
Şimdi uygulamamızı çalıştıralım ve /register sayfasına gidelim.
Formumuzu doldurduk ve kayıt butonuna tıkladık. Gördüğünüz gibi projemizde Register.db şeklinde bir veritabanı oluşturmuş olduk. Şimdi veritabanımızı açalım ve inceleyelim.
Gördüğünüz gibi başarılı bir şekilde veritabanına yeni kullanıcı ekledik.
Şimdi veritabanı içindeki bilgileri okuyalım.
@app.route("/new-users", methods =['POST','GET']) def new_users(): with sqlite3.connect("Register.db") as database: database.row_factory = sqlite3.Row cursor = database.cursor() cursor.execute("SELECT *FROM users") rows = cursor.fetchall() return render_template("new_users.html",rows = rows)
Şimdi /new-users sayfasını açalım.
Veritabanı bilgilerini başarılı bir şekilde okuduk.
Mobilhanem.com da bir dersin daha sonuna geldik. Eksik yada yanlış gördüğünüz yerler için yorum bölümünden veya soru – cevap kısmından ulaşabilirsiniz. Bir sonraki yazıda Flask Framework’te MySQL Konfigürasyonu ve Veritabanı işlemleri konusunu ele alacağız. Bir sonraki yazıda görüşmek üzere.
Tüm Flask Derslerine buradan ulaşabilirsiniz.
58