Node.JS Sequelize Migration Yazma

Herkese merhaba, Node.JS derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde Sequelize ile migration yazmayı anlatacağım. Hadi başlayalım !
Öncelikle migration dosyalarından bahsedelim. Örneğin Sequelize ile bir veritabanı oluşturdunuz fakat sonradan bir tabloya sütun ekleme yada sütun silmeniz gerekti. Bunun için iki yolunuz var. Birincisi sütunu veritabanı tablo modelinize sütunu ekleyip yada çıakrıp veritabanını baştan oluşturmak. İkincisi ise veritabanı tablo modelinize sütunu ekleyip yada çıkarıp bir tanede migration dosyasında ekleme yapmak ve migration dosyasını çalıştırarak veritabanını tekrardan kurmadan halletmek. Veritabanında veri yok yada silinse bile önemli olmayacak veriler varsa ilk yöntem mantıklı olabilir fakat productiona çıktınız, veritabanında veri var ve verilerin silinmemesi gerekiyorsa işte o zaman migration dosyası yazmaktan başka çare yok. Migration yazıp çalıştırmak için ise Sequelize modellerini kurmuş olmanız gerekiyor. Sequelize ile veritabanı bağlantısı yapma ve modelleri oluşturmayı şu yazımızda anlatmıştık, o yüzden tekrardan anlatmayacak, veritabanı modelinin hazır olduğunu varsayarak devam edeceğim.
Migration dosyası yazmak için öncelikle Sequelize aracılığıyla migration eklemeniz gerekiyor. Bunun için proje ana dizinine terminal (Windows için CMD) ile geçerek
npx sequelize migration:generate --name migration_adı
komutunu migration_adı kısmına migrationa vermek istediğiniz ismi yazarak çalıştırmanız gerekiyor. Komutun çalıştırılmasının ardından Sequelize, migration dosyasını oluşturacak ve migrationlar için belirttiğiniz klasör yoluna dosyayı kaydedecektir. Migration dosyasını oluşturduk fakat henüz migrationu yazmadık, yani veritabanında herhangi bir değişiklik yapılmadı. Hemen oluşturulan dosyayı açalım ve Javascript kodu yazarak ne yapmak istediğimizi belirtelim. Dosyayı açtığınızda şöyle bir görüntüsü olacaktır;
Buradaki up ve down fonksiyonlarının ne olduğundan bahsedelim. up fonksiyonu, veritabanı ilk ayağa kalkarken yapılacak işlemleri içerecek. down fonksiyonu ise veritabanını Sequelize ile kaldıracak yada kaldırıp yeniden kuracaksanız çalıştırılıyor. Yani up fonksiyonuna yapacağımız eklemeyi, down fonksiyonuna da bunun tam tersini yazacağız. Yorum satırlarını silebilir ve düzenlemeye geçebiliriz. Örneğin ben kutuphane veritabanımızda kullanicilar tablosuna varchar tipte 255 karakterli email sütununu ekleyelim. Veritabanı üzerinde yapacağımız işlemleri queryInterface, yapacağımız işlemlerde Sequelize tarafını da sequelize parametresi ile yapacağız. Yani örneğin ben email sütununu queryInterface parametresi, email sütununun veritipini de sequelize parametresi ile bildireceğim. Burada yazacağımız kodlara Sequelize’ın da ulaşabilmesi gerekiyor çünkü sonuçta migration dosyasını çalıştırırken dosya içeriğini okuyabilmeli. E tabi bunuda up ve down fonksiyonlarından geri dönen değerler ile yapabilir. O yüzden her iki fonksiyonda da işlemi return etmemiz gerekiyor.
Tabloya sütun eklemek için addColumn() fonksiyonunu kullanacağız ve bu fonksiyon tablo adı, sütun adı ve sütun bilgileri olmak üzere 3 parametre istiyor. email sütununu şöyle ekleyelim;
up: async (queryInterface, Sequelize) => {
return await queryInterface.addColumn('kullanicilar', 'email', { type: Sequelize.DataTypes.STRING(255) });
},
down: async (queryInterface, Sequelize) => {
return await queryInterface.removeColumn('kullanicilar', 'email', { type: Sequelize.DataTypes.STRING(255) });
}
Veritabanına sütun eklemeyi anlattım. Şimdi de veritabanı üzerinde sorgu çalıştırmaya geçelim. Sorgu çalıştırmayı normalde Sequelize modeli üzerinden yapabiliyoruz fakat kimileri fanteziye girerek bunu migration üzerinden yapıyor. Aslında tam olarak fantezi de sayılmaz çünkü migration dosyaları her veritabanını kurduğumuzda çalıştığı için veritabanı kurulur kurulmaz veri ekleme işlemi yapılabilir. Bunun içinde bir tane migration dosyası oluşturalım ve örneğin kullanicilar tablosuna kullaniciAdi olarak admin, şifre olarak admin ve email olarakta admin@site.com değerlerini ekleyelim. Burada dikkat etmemiz gereken şey, up fonksiyonu içerisinde veritabanı oluşturulurken yapılacakları, down ilede veritabanı kaldırılırken yapılacakları yazıyorduk ya, veritabanı üzerinde yapılacak sorgular veritabanı kaldırıldığında geçersiz olacağı için yani herhangi bir silme işlemi yapmamıza gerek olmadığı için down fonksiyonunu yazmayacağız.
const sorgu = 'insert into kullanicilar(kullaniciAdi, sifre, email) values('admin', 'admin', 'admin@site.com');
up: async (queryInterface, Sequelize) => {
return await queryInterface.sequelize.query(sorgu);
}
Son olarak migration ile tablo eklemeyi anlatalım ve yazımızı sonlandıralım. Tablo eklemesi yapmak içinde queryInterface parametresi altındaki createTable() fonksiyonunu kullanacağız ve bu fonksiyona tablo adı ve model olmak üzere 2 parametre göndereceğiz. Tablo adı string, model ise object tipinde olacak. Tabi bu işlemleri up fonksiyonu içerisinde yapacağız, down fonksiyonunda ise dropTable() fonksiyonunu kullanacağız. Bu fonksiyonda sadece tablo adını parametre olarak istiyor.
Örneğin ogrenciler adında bir tabloyu kutuphane veritabanına ekleyelim. Bu tabloda primary key ve auto increment olan integer tipte ogrenciID, varchar tipte 255 karakterli ogrenciAdi ve varchar tipte 6 karakterli ogrenciNo sütunları olsun.
up: async (queryInterface, Sequelize) => {
return await queryInterface.createTable('ogrenciler', {
ogrenciID: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true
},
ogrenciAdi: {
type: Sequelize.DataTypes.STRING(255)
},
ogrenciNo: {
type: Sequelize.DataTypes.STRING(6)
}
});
},
down: async (queryInterface, Sequelize) => {
return await queryInterface.dropTable('ogrenciler');
}
Eveeett Sequelize ile migration yazma işlemleri işte bu kadar. Tüm Node.JS yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.