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": []} # 翻译person_name, bureau_id async def translate_person_bureau_name(page): for item in page["list"]: if item["person_id"] is not None: person_id = str(item["person_id"]) person_name = await find_person_name_by_id(person_id) if person_name: item["person_name"] = person_name else: item["person_name"] = "" if item["bureau_id"] is not None: bureau_id = str(item["bureau_id"]) bureau_name = await find_bureau_name_by_id(bureau_id) if bureau_name: item["bureau_name"] = bureau_name else: item["bureau_name"] = "" return page