Merih Forum Programlama ve yazılım algoritmalar programlama python Flask database migration, Flask-migrate eklentisi

  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
database migration, Flask-migrate eklentisi

 
#1

Database Migration
Daha önceki konularda tabloları tasarlarken, python programlama dilindeki sınıfları kullandık. Bu sınıflar veritabanınadaki tablolara karşılık gelirler. Bu sınıflar tabloları oluşturmada kullanılır. Diyelim ki bu sınıflarda değişiklik yapıldığında bu değişikliğin veritabanına yapılması sorunu ortaya çıkar. Çünkü tablolar ilk oluşturulduğunda veritabanında bu sınıfların ilk hali yer alır. Database Migration ise veritabanı tablolarına yapılan bu değişikliklerin veritabanına eklenmesi işlemidir. Bu işlem için geliştirilen Database Migration Frameworkler'i vardır. Bu frameworkler sınıflara yapılan bu değişiklikleri tutar ve veritabanına işlenmesini sağlar.
SQLAlchemy geliştiricileri Alembic isminde bir database migration framework geliştirmişler. Flask geliştiricileri Alembic'i kullanarak bir eklenti geliştirmişler bu eklenti ile migrate işlemlerini yapacağız. Bu eklentiyi yüklemek için:
Kod:
$ pip install flask-migrate
$ pip install flask-script

Bu eklentiyi kullanmadan önce, daha önce anlattığım flask-script eklentisi hakkında biraz bilgi vermek istiyorum. flask-script ile uygulamamızı farklı modlarda çalıştırmayı öğrenmiştik(örneğin test modu). Şimdi bir örnek yapalım:
Kod:
#hello.py
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand


app = Flask(__name__)
app.config.update(
   SQLALCHEMY_DATABASE_URI = "sqlite:///db.sqlite",
   SQLALCHEMY_TRACK_MODIFICATIONS = True
)


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


class User(db.Model):
   __tablename__ = 'users'
   id = db.Column(db.Integer, primary_key=True)
   name = db.Column(db.String(10), unique=True)


@app.route("/", methods=['GET', 'POST'])
def index():
   return render_template('index.html')


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

Şimdi database migration işlemlerini yapabiliriz. Flask-migrate eklentisinden import ettiğimiz 
Kod:
MigrateCommand

 sınıfını 

Kod:
db

 isminde bir komuta bağlıyoruz. Yani bu sınıfın komutlarını kullanmak için db isminde bir komut ekliyoruz, bu komut yazıldığında kullanabileceğimiz komutlar listelenecektir:

$ python hello.py db ... migrate Alias for 'revision --autogenerate' init Creates a new migration repository show Show the revision denoted by the given symbol. upgrade Upgrade to a later version ...
görüldüğü gibi komutların karşısında ne iş yaptıklarıda yazılıyor.
Database migration işlemleri için bir klasör oluşturulur. Bu klasörde tüm migration scriptleri tutulur. Bu klasörü oluşturmak için:
Kod:
$ python hello.py db init

bu işlemden sonra 
Kod:
migrations/

 isminde bir klasör oluşturulur.

Alembic framework'ü database migration'ı 
Kod:
migrate

 script ile yönetir. Bu script'e 

Kod:
upgrade()

 ve 

Kod:
downgrade()

 isminde iki fonksiyon bulunur. 

Kod:
upgrade()

 fonksiyonu yeni eklenen işlemleri veritabanına eklenir. 

Kod:
downgrade()

 fonksiyonu ise bir önceki durumuna getirir.

Alembic migration'larını otomatik oluşturmak için 
Kod:
migrate

 komutu kullanılır. Bu komut 

Kod:
upgrade()

 ve 

Kod:
downgrade()

 fonksiyonları için otomatik olarak kod oluşturur. Bu kodları oluştururken veritabanın o anki durumuna ve model sınıfların durumuna bakarak oluşturur:

Kod:
$ python hello.py db migrate

bu komuttan sonra, upgrade() ve downgrade() fonksiyonları oluşturulmuştur:
Kod:
$ python hello.py db upgrade

bu komut veritabanındaki verileri değiştirmeden en son değişiklikleri veritabanına uygular.



Bul
Alıntı


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Flask ile örnek bir uygulama altyapısı efsane 1 3,120 30-05-2017, Saat: 18:14
Son Mesaj: dalaylama
  Flask-sqlalchemy ile tablo oluşturma, tablolar arasında ilişki tanımlama efsane 0 2,588 30-05-2017, Saat: 17:19
Son Mesaj: efsane
  Flask-sqlalchemy eklentisi, sütun veri tipleri efsane 0 2,231 30-05-2017, Saat: 17:18
Son Mesaj: efsane
  flask uygulamasına veritabanı ekleme sqlalchemy, orm efsane 0 2,722 30-05-2017, Saat: 17:16
Son Mesaj: efsane
  kullanıcıya mesaj gönderme (flask'ın flash() fonksiyonu) efsane 0 2,004 30-05-2017, Saat: 17:14
Son Mesaj: efsane

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Bu konuyu görüntüleyen kullanıcı(lar):
1 Ziyaretçi

   
Türkçe Çeviri: Emre KRMN, Kodlayanlar MyBB, © 2002-2024 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-∞ Tüm hakları saklıdır.