Flask merupakan salah satu framework python yang cukup populer. Flaskmenerapkan konsep kode yang sederhana sehingga flask sangat cocok untuk membangun sebuah RESTful API.

Jika masih belum terbiasa dengan Flask, kamu dapat membaca dan mempelajari dokumentasinya di sini 

untuk mengikuti tutorial ini kamu dapat membaca tutorial sebelumnya tentang instalasi flask framework.  selanjutnya ikuti kita akan membuat Rest Api sederhana yang menampilkan list sebuah produk.

Pada saat melakukan pencarian data biasanya kita melakukan filter berdasarkan Tanggal, Bulan, dan Tahun. pada bahasa sql bisa menggunakan DATEDIFF atau BETWEEN.

Untuk pencarian data dengan filter by date pada Flask alchemy kamu bisa memanfaatkan constructor DATE menggunakan “year” dan “month”. untuk lebih memahami hal tersebut perhatikan studi kasus di bawah ini :

perhatikan sample file model di bawah ini

 

from app import db
 
class Payouts(db.Model):
    __tablename__ = 'payout'
    id = db.Column(db.Integer, primary_key=True)
    payout_ref = db.Column(db.String(35), nullable=True)
    amount = db.Column(db.Float, nullable=True)
    paid_at = db.Column(db.Date, default=datetime.now)

 

pada file model diatas, kita punya sebuah table bernama payout. dengan memanfaatkan Sqlalchemy tampilkan data payout berdasarkan

  • bulan dan tahun saat ini
  • tanggal 5 – 20 juni 2018

bagaimana flask alchemy menyelesaikan permasalahan tersebut ?, perhatikan code python di bawah ini :

  • By Current
from app.api.payout import model
from datetime import datetime
from flask import flash, redirect, render_template, url_for, request, jsonify
 
 
@payouts.route('/payouts/current', methods=['GET'])
def payouts_current():
    try:
        xcurrentMonth = datetime.now().month
        currentYear = datetime.now().year
 
        getPay = model.Payouts.query.filter(
            extract('year', model.Payouts.paid_at) == currentYear,
            extract('month', model.Payouts.paid_at) == xcurrentMonth
        )
        lst =[]
        for x in getPay:
            ldata = {}
            ldata['payout_ref'] = x.payout_ref
            ldata['total_payout'] = str(x.amount)                        
            lst.append(ldata)        
        if len(lst) > 0:
            data = lst
        else:
            data = {
                "status": "error",
                "message": "data not found"
            }
    except Exception as e:
        data = {
            "status": "error",
            "message": str(e)
        }
    return jsonify(data)

 

  • By History
from app.api.payout import model
from datetime import datetime
from flask import flash, redirect, render_template, url_for, request, jsonify
 
@payouts.route('/payouts/history', methods=['GET'])
def payouts_history():
    try:
 
        start_date = request.args.get('start_date')
        end_date = request.args.get('end_date')       
        getPay = model.Payouts.query.filter(
            model.Payouts.paid_at.between(start_date, end_date)
        )
        lst = []
        for x in getPay:
            ldata = {}
            ldata['payout_ref'] = x.payout_ref
            ldata['total_payout'] = str(x.amount)                  
            lst.append(ldata)
        if len(lst) > 0:
            data = lst
        else:
            data = {
                "status": "error",
                "message": "data not found"
            }
    except Exception as e:
        data = {
            "status": "error",
            "message": str(e)
        }
    return jsonify(data)

baca artikel lainya :