You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.9 KiB
49 lines
1.9 KiB
import math
|
|
from utils.Database import *
|
|
|
|
|
|
# 查询数据条数
|
|
async def get_total_data_count(total_data_sql):
|
|
total_data_count = 0
|
|
total_data_count_sql = "select count(*) as num from (" + total_data_sql + ") as temp_table"
|
|
result = await find_by_sql(total_data_count_sql,())
|
|
row = result[0] if result else None
|
|
if row:
|
|
total_data_count = row.get("num")
|
|
return total_data_count
|
|
|
|
|
|
def get_page_by_total_row(total_data_count, page_number, page_size):
|
|
total_page = (page_size != 0) and math.floor((total_data_count + page_size - 1) / page_size) or 0
|
|
if page_number <= 0:
|
|
page_number = 1
|
|
if 0 < total_page < page_number:
|
|
page_number = total_page
|
|
offset = page_size * page_number - page_size
|
|
limit = page_size
|
|
return total_data_count, total_page, offset, limit
|
|
|
|
|
|
async def get_page_data_by_sql(total_data_sql: str, page_number: int, page_size: int):
|
|
total_row: int = 0
|
|
total_page: int = 0
|
|
total_data_sql = total_data_sql.replace(";", "")
|
|
total_data_sql = total_data_sql.replace(" FROM ", " from ")
|
|
|
|
# 查询总数
|
|
total_data_count = await get_total_data_count(total_data_sql)
|
|
if total_data_count == 0:
|
|
return {"page_number": page_number, "page_size": page_size, "total_row": 0, "total_page": 0, "list": []}
|
|
else:
|
|
total_row, total_page, offset, limit = get_page_by_total_row(total_data_count, page_number, page_size)
|
|
|
|
# 构造执行分页查询的sql语句
|
|
page_data_sql = total_data_sql + " LIMIT %d offset %d " % (limit, offset)
|
|
print(page_data_sql)
|
|
# 执行分页查询
|
|
page_data = await find_by_sql(page_data_sql, ())
|
|
if page_data:
|
|
return {"page_number": page_number, "page_size": page_size, "total_row": total_row, "total_page": total_page, "list": page_data}
|
|
else:
|
|
return {"page_number": page_number, "page_size": page_size, "total_row": 0, "total_page": 0, "list": []}
|