Automatic Data Seeding and Migration in Python

Refo Ilmiya
AdHub Team
Published in
3 min readApr 29, 2019

Data seeding

Data seeding diperlukan apabila kita tidak ingin ada data yang hilang. Misalnya pada adhub, setiap kami melakukan deployment database selalu di-reset, hal ini dapat menghilangkan data user dan data iklan yang sudah tersimpan di database. Masalah ini dapat dihindari dengan melakukan data seeding. Saat ini, kami belum mengimplementasikan code tersebut di staging namun berikut adalah implementasi Saya untuk automated data seeding di Adhub:

Implemenetasi Automated Data Seeding

Asumsi adalah kita telah melakukan data-dumping dari database yang ingin disimpan dengan menjalankan command

Sehingga seluruh data user akan disimpan dalam bentuk json user_profile.json

Untuk contoh saat ini, user_profile berisi 4 data user.

Kemudian, web adhub dilakukan reset untuk menghilangkan seluruh database dan memulai dari awal dengan melakukan command

Kita kemudian dapat melakukan data seeding dengan menjalankan command

Terlihat bahwa 4 objek yang sebelumnya tersimpan di user_profile berhasil ditambahkan ke database setelah website di-reset.

Untuk automatisasinya, kita dapat dengan mudah menambahkan perintah python manage.py loaddata [namafile yang ingin di seeding] ke dalam docker-compose.yml ataupun gitlab-ci.yml, berikut adalah contoh nya pada branch 31 di gitlab.

Pada gitlab-ci.yml:

https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/US-31-auto-seeding/.gitlab-ci.yml

Pada docker-compose.yml

https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/US-31-auto-seeding/docker-compose.yml

Terlihat dari kedua gambar di atas, kami menggunakan data user yang sebelumnya sudah di-dump untuk kemudian di-seed ke dalam database web kami yang baru up dengan menggunakna command

“python manage.py loaddata user_profile.json”.

Django Migration

Pada DjangoFramework , Django menyediakan cara untuk melakukan migrasi , yaitu dengan menggunakan commands yang disediakan oleh django, terdapat beberapa perintah yang bisa digunakan untuk berinteraksi dengan migration pada django framework yaitu:

  1. python manage.py makemigrations . Berfungsi untuk membuat migrasi baru berdasarkan perubahan yang telah dibuat di models.
  2. python manage.py migrate . Berfungsi untuk mengaplikasikan migrasi.
  3. sqlmigrate . Berfungsi untuk menampilkan SQL statement untuk migrasi.
  4. showmigrations . Berfungsi untuk menunjukan list migrasi yang ada di project beserta dengan statusnya.

Untuk analogi nya bisa digambarkan makemigrations dan migrate seperti git add dan git commit pada Git Commands. Jika tidak ada perubahan pada makemigrations, maka kita tidak dapat melakukan migrate.

Oleh karena itu, kita dapat melakukan otomisasi django migrations dengan memasukkan command nya ke gitlab-ci, docker-composedan-yml, dan pada editor di portainer

Implementasi di Adhub

Pada gitlab-ci

source:
https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/staging/.gitlab-ci.yml

Pada Portainer editor

source:
https://portainer.docker.ppl.cs.ui.ac.id/#/stacks/staging?id=173&type=2&external=false

Pada docker-compose:

source:
https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/staging/docker-compose.yml

Dari ketiga gambar di atas terlihat bahwa kami telah melakukan otomisasi makemigrations dan migrate dengan menuliskan perintah yang bersangkutan di file-file yang perlu dijalankan.

--

--