fix: sqlor IN列表参数展开占位符(kb_delete 500+媒体检索潜伏同病,共4处)

This commit is contained in:
ymq 2026-09-04 19:58:31 +08:00
parent 3f5c6fc3e7
commit d3dda01e6e
2 changed files with 15 additions and 7 deletions

View File

@ -176,7 +176,9 @@ async def kb_delete(env, ns):
# DB 记录 # DB 记录
if doc_ids: if doc_ids:
await sor.sqlExe("DELETE FROM rag_document_chunks WHERE doc_id IN (${ids}$)", {"ids": doc_ids}) dmap = {("i%d" % i): d for i, d in enumerate(doc_ids)}
dph = ",".join("${" + k + "}$" for k in dmap)
await sor.sqlExe("DELETE FROM rag_document_chunks WHERE doc_id IN (" + dph + ")", dmap)
await sor.sqlExe("DELETE FROM rag_entities WHERE kb_id=${k}$", {"k": kb_id}) await sor.sqlExe("DELETE FROM rag_entities WHERE kb_id=${k}$", {"k": kb_id})
await sor.sqlExe("DELETE FROM rag_entity_relations WHERE kb_id=${k}$", {"k": kb_id}) await sor.sqlExe("DELETE FROM rag_entity_relations WHERE kb_id=${k}$", {"k": kb_id})
await sor.sqlExe("DELETE FROM rag_media_tags WHERE kb_id=${k}$", {"k": kb_id}) await sor.sqlExe("DELETE FROM rag_media_tags WHERE kb_id=${k}$", {"k": kb_id})

View File

@ -1132,21 +1132,27 @@ async def tag_search_handler(request, params_kw, *args, **kwargs):
voice_ids = [mid for mt, mid in matched if mt == "voice"] voice_ids = [mid for mt, mid in matched if mt == "voice"]
results = [] results = []
if doc_ids: if doc_ids:
dmap = {("i%d" % i): d for i, d in enumerate(doc_ids)}
dph = ",".join("${" + k + "}$" for k in dmap)
docs = await sor.sqlExe( docs = await sor.sqlExe(
"SELECT id, file_name, file_type, file_size, status, created_at FROM rag_documents WHERE id IN (${ids}$)", "SELECT id, file_name, file_type, file_size, status, created_at FROM rag_documents WHERE id IN (" + dph + ")",
{"ids": doc_ids}) dmap)
for d in docs: for d in docs:
results.append({"type": "document", "id": d.id, "name": d.file_name, "file_type": d.file_type, "size": d.file_size, "status": d.status, "created_at": str(d.created_at)}) results.append({"type": "document", "id": d.id, "name": d.file_name, "file_type": d.file_type, "size": d.file_size, "status": d.status, "created_at": str(d.created_at)})
if face_ids: if face_ids:
fmap = {("i%d" % i): d for i, d in enumerate(face_ids)}
fph = ",".join("${" + k + "}$" for k in fmap)
faces = await sor.sqlExe( faces = await sor.sqlExe(
"SELECT id, name, description, face_embedding_id, created_at FROM rag_entities WHERE id IN (${ids}$) AND entity_type='person'", "SELECT id, name, description, face_embedding_id, created_at FROM rag_entities WHERE id IN (" + fph + ") AND entity_type='person'",
{"ids": face_ids}) fmap)
for f in faces: for f in faces:
results.append({"type": "face", "id": f.id, "name": f.name, "description": f.description, "created_at": str(f.created_at)}) results.append({"type": "face", "id": f.id, "name": f.name, "description": f.description, "created_at": str(f.created_at)})
if voice_ids: if voice_ids:
vmap = {("i%d" % i): d for i, d in enumerate(voice_ids)}
vph = ",".join("${" + k + "}$" for k in vmap)
voices = await sor.sqlExe( voices = await sor.sqlExe(
"SELECT id, name, description, voice_embedding_id, created_at FROM rag_entities WHERE id IN (${ids}$) AND entity_type='voice'", "SELECT id, name, description, voice_embedding_id, created_at FROM rag_entities WHERE id IN (" + vph + ") AND entity_type='voice'",
{"ids": voice_ids}) vmap)
for v in voices: for v in voices:
results.append({"type": "voice", "id": v.id, "name": v.name, "description": v.description, "created_at": str(v.created_at)}) results.append({"type": "voice", "id": v.id, "name": v.name, "description": v.description, "created_at": str(v.created_at)})
if query: if query: