天天看點

Python程式設計:資料庫分頁取資料Python程式設計:資料庫分頁取資料加強版分頁函數

Python程式設計:資料庫分頁取資料

def paginate(page, paginate_by=20):
    """
    表分頁
    """
    if page > 0:
        page -= 1

    return {
        "limit": paginate_by,
        "offset": page * paginate_by
    }


if __name__ == "__main__":
   for i in range(1, 10):
       ret = paginate(i)
       print(ret["limit"], ret["offset"])
   
   """
   (20, 0)
   (20, 20)
   (20, 40)
   (20, 60)
   (20, 80)
   (20, 100)
   (20, 120)
   (20, 140)
   (20, 160)
   """
      

分頁函數參考peewee子產品

加強版分頁函數

由于前端傳回來的參數,都是字元串,後端還要轉為int,每次都轉很麻煩,是以直接封裝到分頁函數裡

# -*- coding: utf-8 -*-

def paginate(page, size=20):
    """
    資料庫 分頁 和 翻頁 功能函數
    @param page: int or str 頁面頁數
    @param size: int or str 分頁大小
    @return: dict
    {
        'limit': 20,   所取資料行數
        'offset': 0,   跳過的行數
        'before': 0,   前一頁頁碼
        'current': 1,  目前頁頁碼
        'next': 2      後一頁頁碼
    }
    """

    if not isinstance(page, int):
        try:
            page = int(page)
        except TypeError:
            page = 1

    if not isinstance(size, int):
        try:
            size = int(size)
        except TypeError:
            size = 20

    if page > 0:
        page -= 1

    data = {
        "limit": size,
        "offset": page * size,
        "before": page,
        "current": page + 1,
        "next": page + 2
    }

    return data


if __name__ == '__main__':
    result = paginate(None, None)
    print(result)

    result = paginate(0, 20)
    print(result)

    result = paginate(1, 50)
    print(result)

    result = paginate(3, 20)
    print(result)

    result = paginate("3", "30")
    print(result)

    """
    {'limit': 20, 'offset': 0, 'before': 0, 'current': 1, 'next': 2}
    {'limit': 20, 'offset': 0, 'before': 0, 'current': 1, 'next': 2}
    {'limit': 50, 'offset': 0, 'before': 0, 'current': 1, 'next': 2}
    {'limit': 20, 'offset': 40, 'before': 2, 'current': 3, 'next': 4}
    {'limit': 30, 'offset': 60, 'before': 2, 'current': 3, 'next': 4}
    """