Flask Alchemy, Filter by Date

hello friends,

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)

selamat mencoba 🙂

mm

Alfin F

Technopreneur , Developer, Advisor

More Posts

Follow Me:
TwitterLinkedIn