Module Beginner 4 Desember 2019

Tutorial RESTful API dengan Flask Python Part 2— Konfigurasi Database MySQL dan Migration

Membuat RESTful API dengan Micro Framework Python, Flask Part 2— Konfigurasi Database MySQL dan Migration

Tutorial RESTful API dengan Flask Python Part 2— Konfigurasi Database MySQL dan Migration

Membuat RESTful API dengan Micro Framework Python, Flask Part 2— Konfigurasi Database MySQL dan Migration

Image Halo gan kembali lagi bersama saya Kiddy yang masih semangat ngoding Flask nih. Pada tutorial kali ini kita akan ngebahas gimana cara konfigurasi Database MySQL dan Ngurus Migrationnya di Flask.

Tanpa basa-basi yuk kita coding hepi-hepi.

Pertama, install dulu gan library ORM yang udah ada dari Flask yaitu SQLAlchemy.

pip install flask-sqlalchemyNah kalo udah ayo kita install juga gan migrationnya, buatan om miguel grinberg. Karena kita bakalan pake migration dari DBnya, wah canggih bener ye, bahkan Laravel belom ada pun Flask udah kepikiran buat Migrationnya loh.

pip install flask-migrateNah kalo udah terakhir install pymysql biar kita bisa ngonekkin Flask kita sama DB MySQL kita.

pip install pymysql

Kalo udah yang pertama kali kita harus set ya .flaskenv kita, masukkin data dibawah dan sesuaikan sama environment agan.

FLASK_APP=main.pyDB_HOST=localhostDB_DATABASE=latihan**DB_USERNAME=homesteadDB_PASSWORD=secretNah kalo udah saatnya ubah sedikit init.py* *didalam folder app kita menjadi seperti ini:

from flask import Flaskfrom config import Configfrom flask_sqlalchemy import SQLAlchemyfrom flask_migrate import Migrateapp = Flask(name)app.config.from_object(Config)db = SQLAlchemy(app)migrate = Migrate(app, db)from app import routes, modelsTerakhir buat file config.py pada root folder yang sejajar dengan .flaskenv

import osbasedir = os.path.abspath(os.path.dirname(file))class Config(object): HOST = str(os.environ.get(“DB_HOST”)) DATABASE = str(os.environ.get(“DB_DATABASE”)) USERNAME = str(os.environ.get(“DB_USERNAME”)) PASSWORD = str(os.environ.get(“DB_PASSWORD”)) SQLALCHEMY_DATABASE_URI = ‘mysql+pymysql://’ + USERNAME + ’:’ + PASSWORD + ’@’ + HOST + ’/’ + DATABASE SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_RECORD_QUERIES = TrueNah sebelum jalan kita perlu inisialisasi DB Library-nya dulu, jalanin pake command dibawah:

flask db initNanti akan muncul folder migrations pada projek kita.

Image

Oke sekarang kita akan membuat migrations, tapi sebelum membuat migrations kita harus mendefinisikan Model kita dulu. Kalo kamu biasa pake Laravel pasti akan cukup bingung sama migration di Flask.

Pertama buat dulu file bernama models.py didalam folder app, setelah itu masukkan kode dibawah ini:

from app import dbfrom datetime import datetimeclass Users(db.Model): id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) name = db.Column(db.String(230), nullable=False) email = db.Column(db.String(120), index=True, unique=True, nullable=False) password = db.Column(db.String(128), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow) def repr(self): return ‘<User {}>‘.format(self.name)Jadi pada Flask, sebelum kita membuat migration kita wajib membuat Modelnya terlebih dahulu. Setelah itu kita dapat menggenerate migrationnya dengan cara:

flask db migrate -m “komentar migration”contoh:

flask db migrate -m “users table only”Maka akan muncul pada folder migrations/versions.

Image Mehod upgrade dan downgrade ya sama saja dengan up and downnya Migration Laravel.

Oke sekarang kita migrate dulu, caranya adalah

flask db upgradeMaka akan muncul di database:

Image alembic_version itu sama saja seperti migrations di Laravel, yang merupakan penanda versi migration.

Okey kalo Users sudah sekarang saatnya buat model Todo, yuk sekarang kita tambahkan saja class Todo pada **models.py **pada paling bawah class setelah Users.

class Todos(db.Model): id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) todo = db.Column(db.String(140), nullable=False) description = db.Column(db.Text, nullable=True) created_at = db.Column(db.DateTime, index=True, default=datetime.utcnow) updated_at = db.Column(db.DateTime, index=True, default=datetime.utcnow) user_id = db.Column(db.BigInteger, db.ForeignKey(Users.id)) def repr(self): return ‘<Todo {}>‘.format(self.todo)Nah kalo modelnya udah ditambahin maka sekarang kita buat migrationnya, caranya sama:

flask db migrate -m “Create table Todos” Image Migration kedua kita berhasil dibuat! Yuk kita coba upgrade db kita.

flask db upgradeMantap cuy, sekarang kita udah punya dua table berelasi.

Image

Oke mungkin pada penasaran kalo cara downgradenya gimana? Jalanin aja dengan cara:

flask db downgradeOtomatis table todos akan menghilang karena down_revisionnya dirollback ke versi sebelumnya, yaitu cuma users table yang dibuat. Tinggal upgrade aja lagi kok.

Oke sekian dulu dari ane, semoga bermanfaat dan kita akan lanjutkan ini ke tutorial selanjutnya~


Artikel ini merupakan konten legacy dari blog Medium (Tahun 2019). Beberapa konsep atau sintaks mungkin sudah mengalami perubahan pada versi terbaru.