Flask MVC (Unit-8) Migration

Buraya kadar geldiyseniz artık bir flask projesi nasıl yapılır üç aşağı beş yukarı biliyorsunuz fakat eksik kalan bir bölüm daha var o da migration. Evet migration olmadan da dbFirst olarak projenizi yapabilirsiniz fakat ben code first yaklaşımı daha çok sevdiğim için bu projede migration kullandım isterseniz siz kendi projelerinizde kullanmayabilrsiniz fakal db first ile gittiğinizde db’de yaptığınız işlemlemleri modellerinize de yapamayı unutmayın fark olursa zaten SQLAlchemy ORM’u bu durumu size bildirecektir. İsterseniz ORM’da kullanmayabilirsiniz tabi :). Bu arada değinmekte fayda var Flask bir P.O.C. frameworktür çok request alacağınız productionlar için tavsiye edilmez. Ayrıca flask http sunucusu async olarak çalışmaz.

#migrate.py
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db


migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

Evet yukarıda migration için gerekli .py dosyasını görüyorsunuz. Migration için kullanılacak olan app ve db (app = Flask() ve db=SQLAlchemy(app) ) bilgilerini veriyoruz. Bu sayede migration ilgili app’den db’ye register edilmiş olan tüm db.Model sınıflarını otomatik olarak bulacak ve database structer işlemlerini sizin yerinize otomatik olarak yapacaktır. Migration için bu dosyayı oluşturduktan sonra command üzerinden bir kaç komut yazmamız icab ediyor.

python migrate.py db init
python migrate.py db migrate
python migrate.py db upgrade

Yukardaki satırlardan ini ve migrate işlemi ilk çalıştırmada upgrade ise her model değişiminde yapılmalıdır. Yukardaki satırları çalıştırdığımızda proje rootunda migrations klasörü oluşacak ve her db upgrade dediğimizde versions klasörü altında ilgili değişikliker script halinde otomatik oluşacaktır.

Projenizde çeşitli denemeler yapabilir migrationlarınız sıfırlamak isteyebilirsiniz. Bunun için gerekli command satırlarını aşağıda veriyorum. Test için ben bir çok kez kullanmıştım.

RMDIR "migrations" /S /Q
del data.db

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.