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}
"""