Anda di halaman 1dari 6

Tutorial RESTful API dengan Flask Python

Part 2— Konfigurasi Database MySQL dan


Migration
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-sqlalchemy

Nah 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-migrate

Nah 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.py
DB_HOST=localhost
DB_DATABASE=latihan
DB_USERNAME=homestead
DB_PASSWORD=secret

Nah kalo udah saatnya ubah sedikit __init__.py didalam folder app kita menjadi seperti ini:
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
from app import routes, models

Terakhir buat file config.py pada root folder yang sejajar dengan .flaskenv
import os
basedir = 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 = True

Nah sebelum jalan kita perlu inisialisasi DB Library-nya dulu, jalanin pake command dibawah:
flask db init

Nanti akan muncul folder migrations pada projek kita.

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 db
from datetime import datetime
class 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.


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

Oke sekarang kita migrate dulu, caranya adalah


flask db upgrade

Maka akan muncul di database:

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"

Migration kedua kita berhasil dibuat! Yuk kita coba upgrade db kita.
flask db upgrade

Mantap cuy, sekarang kita udah punya dua table berelasi.


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

Otomatis 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~

Anda mungkin juga menyukai