Flask Dersleri

Flask ile Veritabanı İşlemleri (SQLite)

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

Cahit İşleyen

Data Scientist at @Embedica.ai
Python ve Linux sever.
Çay tiryakisi

5 Yorum

  • Elinize sağlık öğretici bir kaynak olmuş.
    validatorler’de ne hikmetse bir sıkıntı var verdiğimiz custom mesajları inatla göstermiyor fakat browser kendi mesajını gösteriyor. register formuna novalidate yaptığımızda bu sefer hiç bir validation yapmıyor.
    wtform’dan
    class NoRequiredForm(Form):
    class Meta:
    def render_field(self, field, render_kw):
    render_kw.setdefault(‘required’, False)
    return super().render_field(field, render_kw)
    olarak yeni bir form türetiyoruz yine hiç bir mesaj vermiyor.
    İşin özü custom mesaj python flask wtformda validatorler custom mesaj vermiyor.

  • abi python 3.6 kullanıyorum
    wtform pip install ile başarılı şekilde de indirdim ama projede wtform kullanamıyorum modül bulunamadı diye hata veriyor
    nette araştırdım çözümünü bulamadım
    lütfen yardım edermisin
    Hata Mesajı :
    Traceback (most recent call last):
    File “c:\Users\MYSTIC\Desktop\mobilhanem\app.py”, line 2, in
    from wtforms import Form,StringField,TextField,PasswordField,validators,SubmitField
    ImportError: cannot import name ‘TextField’

    exited with code=1 in 1.923 seconds

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?