bugfix
This commit is contained in:
parent
08a409c00f
commit
6123c45c10
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
import json
|
|
||||||
import asyncio
|
|
||||||
|
|
||||||
result = {'success': False, 'rows': [], 'total': 0, 'page': 1, 'page_size': 10}
|
result = {'success': False, 'rows': [], 'total': 0, 'page': 1, 'page_size': 10}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -16,21 +12,17 @@ try:
|
|||||||
# Build filter conditions
|
# Build filter conditions
|
||||||
conditions = ["userid = ${userid}$"]
|
conditions = ["userid = ${userid}$"]
|
||||||
ns = {'userid': userid}
|
ns = {'userid': userid}
|
||||||
|
|
||||||
if llmcatelogid:
|
if llmcatelogid:
|
||||||
conditions.append("llmid in (select llmid from llm_api_map where llmcatelogid = ${llmcatelogid}$)")
|
conditions.append("llmid in (select llmid from llm_api_map where llmcatelogid = ${llmcatelogid}$)")
|
||||||
ns['llmcatelogid'] = llmcatelogid
|
ns['llmcatelogid'] = llmcatelogid
|
||||||
|
|
||||||
where_clause = " and ".join(conditions)
|
where_clause = " and ".join(conditions)
|
||||||
|
|
||||||
# Count total from both tables (并行两个 count 查询)
|
# Count total from both tables (并行两个 count 查询)
|
||||||
count_sql = f"select count(*) as cnt from {{table}} where {where_clause}"
|
sql1 = f"select count(*) as cnt from llmusage where {where_clause}"
|
||||||
cnt1_recs, cnt2_recs = await asyncio.gather(
|
sql2 = f"select count(*) as cnt from llmusage_history where {where_clause}"
|
||||||
sor.sqlExe(count_sql.format(table='llmusage'), ns),
|
cnt1_recs = await sor.sqlExe(sql1, ns.copy())
|
||||||
sor.sqlExe(count_sql.format(table='llmusage_history'), ns),
|
cnt2_recs = await sor.sqlExe(sql2, ns.copy())
|
||||||
)
|
|
||||||
total = (cnt1_recs[0].cnt if cnt1_recs else 0) + (cnt2_recs[0].cnt if cnt2_recs else 0)
|
total = (cnt1_recs[0].cnt if cnt1_recs else 0) + (cnt2_recs[0].cnt if cnt2_recs else 0)
|
||||||
|
|
||||||
# 优化点 1: 分别查询两张表, 让各自走 (userid, use_time) 复合索引
|
# 优化点 1: 分别查询两张表, 让各自走 (userid, use_time) 复合索引
|
||||||
# 每表取前 offset+page_size 条 (已按 use_time desc 排好)
|
# 每表取前 offset+page_size 条 (已按 use_time desc 排好)
|
||||||
offset = (page - 1) * page_size
|
offset = (page - 1) * page_size
|
||||||
@ -40,10 +32,8 @@ try:
|
|||||||
|
|
||||||
q1 = f"select {select_cols} from llmusage where {where_clause} order by use_time desc limit {fetch}"
|
q1 = f"select {select_cols} from llmusage where {where_clause} order by use_time desc limit {fetch}"
|
||||||
q2 = f"select {select_cols} from llmusage_history where {where_clause} order by use_time desc limit {fetch}"
|
q2 = f"select {select_cols} from llmusage_history where {where_clause} order by use_time desc limit {fetch}"
|
||||||
recs1, recs2 = await asyncio.gather(
|
recs1 = await sor.sqlExe(q1, ns)
|
||||||
sor.sqlExe(q1, ns),
|
recs2 = await sor.sqlExe(q2, ns)
|
||||||
sor.sqlExe(q2, ns),
|
|
||||||
)
|
|
||||||
|
|
||||||
# 优化点 2: Python 归并两个已排序序列 (O(n) 比 SQL UNION+sort 快)
|
# 优化点 2: Python 归并两个已排序序列 (O(n) 比 SQL UNION+sort 快)
|
||||||
merged = []
|
merged = []
|
||||||
@ -85,8 +75,10 @@ try:
|
|||||||
pass
|
pass
|
||||||
return row
|
return row
|
||||||
|
|
||||||
rows = await asyncio.gather(*[_load_io(r) for r in page_rows])
|
rows = []
|
||||||
|
for r in page_rows:
|
||||||
|
d = await _load_io(r)
|
||||||
|
rows.append(d)
|
||||||
result['rows'] = list(rows)
|
result['rows'] = list(rows)
|
||||||
result['total'] = total
|
result['total'] = total
|
||||||
result['page'] = page
|
result['page'] = page
|
||||||
@ -94,6 +86,8 @@ try:
|
|||||||
result['success'] = True
|
result['success'] = True
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
exception(f'{e}{format_exc()}')
|
||||||
result['error'] = str(e)
|
result['error'] = str(e)
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False, default=str)
|
return json.dumps(result, ensure_ascii=False, default=str)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user