fix(rag_client): params读写列不一致致重复行——_load_cached_key按id查但写入id=getID()随机值,缓存永远miss→每次发key新增一行(实测user-01堆12行);ON DUPLICATE KEY UPDATE因params_name无唯一索引永不触发。修:读改按params_name+读-改-写幂等(存在则更新首行删多余行)
This commit is contained in:
parent
78c89a0cce
commit
c32ceaa920
@ -119,7 +119,7 @@ async def _ensure_downapp(sor):
|
||||
async def _load_cached_key(sor, user_id):
|
||||
pname = _KEY_PARAM_PREFIX + str(user_id)
|
||||
recs = await sor.sqlExe(
|
||||
"SELECT params_value FROM params WHERE id=${n}$", {"n": pname})
|
||||
"SELECT params_value FROM params WHERE params_name=${n}$ LIMIT 1", {"n": pname})
|
||||
await sor.sqlExe("COMMIT", {})
|
||||
if not recs:
|
||||
return ""
|
||||
@ -160,10 +160,25 @@ async def get_owner_apikey(owner_id):
|
||||
# RC4 加密存 params(与平台密码字段约定一致)
|
||||
pname = _KEY_PARAM_PREFIX + str(owner_id)
|
||||
enc = _key_encode(key)
|
||||
await sor.sqlExe(
|
||||
"INSERT INTO params (id, params_name, params_value) VALUES (${i}$, ${n}$, ${v}$) "
|
||||
"ON DUPLICATE KEY UPDATE params_value=${v}$",
|
||||
{"i": getID(), "n": pname, "v": enc})
|
||||
# 幂等按 params_name 读-改-写:params 表 params_name 无唯一索引,
|
||||
# 不能用 INSERT...ON DUPLICATE KEY UPDATE(永不触发→重复插行)。
|
||||
# 旧 bug:_load_cached_key 按 id 查、这里按 getID() 随机 id 写,缓存永远 miss
|
||||
# →每次发 key 都新增一行(实测 user-01 堆了 12 行)。2026-09-12 修。
|
||||
exists = await sor.sqlExe(
|
||||
"SELECT id FROM params WHERE params_name=${n}$ ORDER BY id LIMIT 1", {"n": pname})
|
||||
await sor.sqlExe("COMMIT", {})
|
||||
if exists:
|
||||
# 收敛历史重复行:更新首行,删多余行
|
||||
await sor.sqlExe(
|
||||
"UPDATE params SET params_value=${v}$ WHERE id=${i}$",
|
||||
{"v": enc, "i": exists[0].id})
|
||||
await sor.sqlExe(
|
||||
"DELETE FROM params WHERE params_name=${n}$ AND id<>${i}$",
|
||||
{"n": pname, "i": exists[0].id})
|
||||
else:
|
||||
await sor.sqlExe(
|
||||
"INSERT INTO params (id, params_name, params_value) VALUES (${i}$, ${n}$, ${v}$)",
|
||||
{"i": getID(), "n": pname, "v": enc})
|
||||
await sor.sqlExe("COMMIT", {})
|
||||
_key_cache[owner_id] = key
|
||||
return key, ""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user