From d3dda01e6e248c2a5752d29336ef8b3c13aac0cc Mon Sep 17 00:00:00 2001 From: ymq Date: Fri, 4 Sep 2026 19:58:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20sqlor=20IN=E5=88=97=E8=A1=A8=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=B1=95=E5=BC=80=E5=8D=A0=E4=BD=8D=E7=AC=A6(kb=5Fdel?= =?UTF-8?q?ete=20500+=E5=AA=92=E4=BD=93=E6=A3=80=E7=B4=A2=E6=BD=9C?= =?UTF-8?q?=E4=BC=8F=E5=90=8C=E7=97=85,=E5=85=B14=E5=A4=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rag/api_core.py | 4 +++- rag/init.py | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/rag/api_core.py b/rag/api_core.py index fa162af..b7cf4be 100644 --- a/rag/api_core.py +++ b/rag/api_core.py @@ -176,7 +176,9 @@ async def kb_delete(env, ns): # DB 记录 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_entity_relations WHERE kb_id=${k}$", {"k": kb_id}) await sor.sqlExe("DELETE FROM rag_media_tags WHERE kb_id=${k}$", {"k": kb_id}) diff --git a/rag/init.py b/rag/init.py index 7f8d7c8..bf2d873 100644 --- a/rag/init.py +++ b/rag/init.py @@ -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"] results = [] 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( - "SELECT id, file_name, file_type, file_size, status, created_at FROM rag_documents WHERE id IN (${ids}$)", - {"ids": doc_ids}) + "SELECT id, file_name, file_type, file_size, status, created_at FROM rag_documents WHERE id IN (" + dph + ")", + dmap) 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)}) 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( - "SELECT id, name, description, face_embedding_id, created_at FROM rag_entities WHERE id IN (${ids}$) AND entity_type='person'", - {"ids": face_ids}) + "SELECT id, name, description, face_embedding_id, created_at FROM rag_entities WHERE id IN (" + fph + ") AND entity_type='person'", + fmap) for f in faces: results.append({"type": "face", "id": f.id, "name": f.name, "description": f.description, "created_at": str(f.created_at)}) 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( - "SELECT id, name, description, voice_embedding_id, created_at FROM rag_entities WHERE id IN (${ids}$) AND entity_type='voice'", - {"ids": voice_ids}) + "SELECT id, name, description, voice_embedding_id, created_at FROM rag_entities WHERE id IN (" + vph + ") AND entity_type='voice'", + vmap) for v in voices: results.append({"type": "voice", "id": v.id, "name": v.name, "description": v.description, "created_at": str(v.created_at)}) if query: