Flask-Seeder ile Test Verisi Yükleme
Seeding, veritabanına test verisi yüklemek için kullanılan özelliklere verilen isimdir. Proje test aşamasında iken Seeder’lar kullanılarak uygulamaya test verileri yüklenir. Böylece her test işlemi sırasında verilerin tek tek girilmesi zahmetinden bizi kurtarır.
Flask-Seeder Kurulumu ve Yapısı
Bunun için hazır bir kütüphane mevcut, bu kütüphaneyi kullanabiliriz. Paket yöneticimizden rica edip kurulumu yapıyoruz. 🙂
~$ pip install Flask-Seeder
Bu komut bizim için Flask-Seeder kurulumunu yapacak ve flask seed
alt komutunu ekleyecektir.
Yapı olarak bizim seeder dosyaları, proje dizininin altındaki seeds/
klasöründe bulunur. Başka dizinlerdeki seeder dosyaları işleme alınmayacaktır.
Biz seeder dosyalarını işleme koyduğumuzda, başarılı olsun ya da olmasın, bütün işlemler veri tabanına kaydedilir. Eğer test işlemi yapıyorsak (verilerin veritabanına kaydedilmemesini istiyorsak) --no-commit
komutunu beraberinde vermemiz gerekiyor ya da ortam değişkeni olarak FLASK_SEEDER_AUTOCOMMIT=0
değerini tanımlamamız gerekiyor.
Faker
Bizim için gerçek sınıflara dayalı fake, yani sahte veriler üreten sınıftır. Şimdilik desteklediği türler aşağıdaki şekildedir:
Integer: İki değer aralığında tam sayı üretir.
Sequence: Birden fazla çağrılırsa sıralı tam sayılar üretir.
Name: data/names/names.txt
dizininden rastgele seçim yaparak isim üretir.
String: Bir desene bağlı olarak karakter dizisi oluşturur.
Örnek Uygulama
Aşağıda örnek bir app.py
dosyası mevcut.
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_seeder import FlaskSeeder
def create_app():
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
seeder = FlaskSeeder()
seeder.init_app(app, db)
return app
Ve aşağıdaki de bizim örnek seeder dosyamız, seeds/demo.py
dosyası.
from flask_seeder import Seeder, Faker, generator
# SQLAlchemy Veritabanı Modelimiz
class User(Base):
def __init__(self, id_num=None, name=None, age=None):
self.id_num = id_num
self.name = name
self.age = age
def __str__(self):
return "ID=%d, Name=%s, Age=%d" % (self.id_num, self.name, self.age)
# Bütün seeder'lar, Seeder sınıfından miras alır (kalıtım)
class DemoSeeder(Seeder):
# Flask-Seeder tarafından çağrılacak olan varsayılan fonksiyonumuz.
def run(self):
# Faker ile fake (sahte) kullanıcılar oluşturuyoruz. User modelini baz aldığımızı söylüyoruz.
faker = Faker(
cls=User,
init={
"id_num": generator.Sequence(),
"name": generator.Name(),
"age": generator.Integer(start=20, end=100)
}
)
# 5 Kullanıcı Oluştur
for user in faker.create(5):
print("Adding user: %s" % user)
self.db.session.add(user)
Görüldüğü gibi oldukça basit, şimdi terminal üzerinden komut vererek seeder dosyamızı çalıştırıyoruz.
~$ flask seed run Running database seeders Adding user: ID=1, Name=Fancie, Age=76 Adding user: ID=2, Name=Shela, Age=22 Adding user: ID=3, Name=Jo, Age=33 Adding user: ID=4, Name=Laureen, Age=54 Adding user: ID=5, Name=Tandy, Age=66 DemoSeeder... [OK] Committing to database!
Hepsi bu kadar. Kolay gelsin!