2466

Python ile Sıfırdan İleri Seviye Python Programlama

Django Migrations

Python django web geliştirme dersleri serimizin bu bölümünde django migrations nedir ve hangi amaçla kullanılır, öğrenelim.

Django Migrations

Bir önceki dersimizde django models nedir ve hangi amaçla kullanılır, öğrendik.

Django modeli ile aslında veri tabanı tarafındaki tabloların şemasını tanımlamış oluyorduk ancak model karşılığı tabloları temsil edecek olan script'in oluşturulması ve çalıştırılması için django migration nedir ve nasıl kullanılır, öğrenmemiz gerekiyor.

Django projesini "python manage.py runserver" ile çalıştırdığımızda dikkat ettiyseniz terminalde kırmızı yazıyla 18 tane bekleyen migration olduğunu söyler.

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

Burada bahsedilen migration' lar aslında uygulamaya settings.py dosyasındaki installed_app listesinde tanımlanan "admin, auth, contenttypes, sessions" uygulamalarının içinde oluşturulmuş ancak henüz uygulanmamış migration olmasından kaynaklanıyor. Peki bu bekleyen migration' ları uygulayalım.

INSTALLED_APPS = [
    'blog',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

** Burada şu aklınıza gelebilir. Peki blog ve category modeli için oluşturulan bir migration henüz var mı? hayır yok. Çünkü projedeki modelleri temsil edecek olan bir migration da henüz oluşturmadık. Öncelikle var olanları veri tabanına gönderelim. Sonra kendi modellerimiz için migration oluşturup veri tabanına göncereceğiz.

Django Migration Uygulama

Yeni bir django projesi oluşturduğumuzda projeye dahil edilen uygulamalar için önceden tanımlanan değişiklikleri veri tabanına gönderelim. 

Django ile var olan bir migration'i çalıştırmak için "python manage.py migrate" komutunu çalıştırmamız gerekiyor.

Peki artık bekleyen 18 migration'i veri tabanına uyguladık. Veri tabanımız proje ana dizininde olan db.sqlite3 ismindeki dosyadır.

Şu anda projemiz settings.py dosyasındaki ayara göre ana dizin altında sqlite veri tabanını oluşturma durumundadır.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

settings.py dosyasını kontrol ettiğinizde bu ayarı göreceksiniz. 

SQLite veri tabanı sql tabanlı bir veri tabanı türüdür. MySQL , MsSQL ya da Oracle gibi server tabanlı bir veri tabanı değildir. Ancak yapı itibariyle SQL mantığında çalışır. 

Peki bu SQLite veri tabanı içeriğini nasıl kontrol edebiliriz?

SQLite Browser isminde bir IDE aracımız mevcut. Buradaki linkten indirip kurabilirsiniz. 

Kurulumu yaptıktan sonra proje dizinindeki db.sqlite3 dosyasını sqlite browser uygulamasına sürükle bırak yaparak açınız.

Gördüğünüz gibi uyguladığımız migration' lar veri tabanı içerisinde gördüğünüz tabloları oluşturuyor. En basitiyle bize hazır bir üyelik sistemi geliyor ve uygulamaya her üye olan kullanıcının verilerini tutmak için gereken user tabloları oluşturulmuştur. Ya da session bilgilerini saklayacak olan tablolar.

Peki o halde blog uygulamamızda oluşturduğumuz Blog ve Category için yeni bir migration oluşturalım ve uygulayalım.

Django Migration Ekleme

Django projesinde eklediğimiz her bir model ya da güncellediğimiz her bir model için yeni bir migration oluşturmamız gerekiyor. Bu sayede değişiklikleri veri tabanına aktarabiliriz.

"python3 manage.py makemigrations" komutu ile yeni bir migration ekleyebiliriz.

Migration' ı uyguladıktan sonra blog uygulaması altında 0001_initial.py isminde bir dosya oluştu. Bu dosyadaki kodlar aslında veri tabanı tarafında eklenecek olan tabloları temsil ediyor. 

# Generated by Django 3.2.9 on 2022-02-22 09:12

from django.db import migrations, models

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Blog',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200)),
                ('image', models.CharField(max_length=50)),
                ('descrription', models.TextField()),
                ('is_active', models.BooleanField()),
                ('is_home', models.BooleanField()),
            ],
        ),
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=150)),
            ],
        ),
    ]

Kodları incelerseniz Blog ve Category şeması için hangi özelliklerin uygulanacağını görebilirsiniz.

Şimdi ise bu migration' ı uygulayalım.

"python3 manage.py migrate" komutunu terminalden çalıştıralım.

Blog ve Category için gereken migrations veri tabanına uygulandı. SQlite Browser ile veri tabanını kontrol edebilirsiniz.


Kurs Sayfasına Git  
Paylaş