From 855e1cb9c659101fe98f55b08b06195a2fb8231e Mon Sep 17 00:00:00 2001 From: qyyfw Date: Thu, 2 Jul 2026 22:56:48 +0800 Subject: [PATCH] fix: SQLAlchemy 2.0 text() wrapper for raw SQL in knowledge_admin.py --- .../python/app/api/admin/knowledge_admin.py | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/backend/python/app/api/admin/knowledge_admin.py b/backend/python/app/api/admin/knowledge_admin.py index 3445981..68ec5d8 100644 --- a/backend/python/app/api/admin/knowledge_admin.py +++ b/backend/python/app/api/admin/knowledge_admin.py @@ -3,8 +3,8 @@ Phase 2.4: AI PaaS Knowledge Base Management + External KB Integration """ from fastapi import APIRouter, Depends, HTTPException, Query, Body +from sqlalchemy import or_, func, desc, asc, text from sqlalchemy.orm import Session -from sqlalchemy import or_, func, desc, asc from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any from datetime import datetime @@ -715,7 +715,7 @@ def _get_external_services_table(db: Session): # ORM 模型不存在,用原生 SQL try: result = db.execute( - "SELECT id, name, service_type, api_url, api_key, config, is_enabled, status, created_at, updated_at FROM external_kb_services ORDER BY created_at DESC" + text("SELECT id, name, service_type, api_url, api_key, config, is_enabled, status, created_at, updated_at FROM external_kb_services ORDER BY created_at DESC") ) rows = result.fetchall() return [ @@ -831,8 +831,8 @@ async def create_external_service( # 使用原生 SQL 插入(兼容 ORM 模型可能未注册) try: db.execute( - f"INSERT INTO external_kb_services (id, name, service_type, api_url, api_key, config, is_enabled, status, created_at, updated_at) " - f"VALUES (:id, :name, :stype, :url, :key, :cfg, 1, :status, NOW(), NOW())", + text(f"INSERT INTO external_kb_services (id, name, service_type, api_url, api_key, config, is_enabled, status, created_at, updated_at) " + f"VALUES (:id, :name, :stype, :url, :key, :cfg, 1, :status, NOW(), NOW())"), { "id": service_id, "name": req.name, @@ -847,7 +847,7 @@ async def create_external_service( except Exception as e: # 表可能不存在,尝试创建 logger.warning(f"插入外部服务失败: {e}, 尝试创建表") - db.execute(""" + db.execute(text(""" CREATE TABLE IF NOT EXISTS external_kb_services ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(200) NOT NULL, @@ -860,12 +860,12 @@ async def create_external_service( created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 - """) + """)) db.commit() # 再次尝试插入 db.execute( - f"INSERT INTO external_kb_services (id, name, service_type, api_url, api_key, config, is_enabled, status, created_at, updated_at) " - f"VALUES (:id, :name, :stype, :url, :key, :cfg, 1, :status, NOW(), NOW())", + text(f"INSERT INTO external_kb_services (id, name, service_type, api_url, api_key, config, is_enabled, status, created_at, updated_at) " + f"VALUES (:id, :name, :stype, :url, :key, :cfg, 1, :status, NOW(), NOW())"), { "id": service_id, "name": req.name, @@ -911,7 +911,7 @@ async def update_external_service( # 查找现有服务 try: result = db.execute( - "SELECT id, name, service_type, api_url, api_key FROM external_kb_services WHERE id = :sid", + text("SELECT id, name, service_type, api_url, api_key FROM external_kb_services WHERE id = :sid"), {"sid": service_id} ) row = result.fetchone() @@ -951,7 +951,7 @@ async def update_external_service( params["sid"] = service_id db.execute( - f"UPDATE external_kb_services SET {set_clause} WHERE id = :sid", + text(f"UPDATE external_kb_services SET {set_clause} WHERE id = :sid"), params ) db.commit() @@ -977,7 +977,7 @@ async def delete_external_service( """删除外部知识库服务配置""" try: result = db.execute( - "SELECT name FROM external_kb_services WHERE id = :sid", + text("SELECT name FROM external_kb_services WHERE id = :sid"), {"sid": service_id} ) row = result.fetchone() @@ -988,7 +988,7 @@ async def delete_external_service( raise HTTPException(status_code=404, detail="外部知识库服务不存在") name = row[0] - db.execute("DELETE FROM external_kb_services WHERE id = :sid", {"sid": service_id}) + db.execute(text("DELETE FROM external_kb_services WHERE id = :sid"), {"sid": service_id}) db.commit() LogService.log_audit( @@ -1012,7 +1012,7 @@ async def check_external_service_status( """实时检查外部知识库服务的连接状态""" try: result = db.execute( - "SELECT service_type, api_url, api_key FROM external_kb_services WHERE id = :sid", + text("SELECT service_type, api_url, api_key FROM external_kb_services WHERE id = :sid"), {"sid": service_id} ) row = result.fetchone() @@ -1027,7 +1027,7 @@ async def check_external_service_status( # 更新状态 try: db.execute( - "UPDATE external_kb_services SET status = :status, updated_at = NOW() WHERE id = :sid", + text("UPDATE external_kb_services SET status = :status, updated_at = NOW() WHERE id = :sid"), {"status": conn_result.get("status", "disconnected"), "sid": service_id} ) db.commit() @@ -1061,7 +1061,7 @@ async def sync_knowledge_base( # 查询外部服务配置 try: result = db.execute( - "SELECT name, service_type, api_url, api_key, config FROM external_kb_services WHERE id = :sid", + text("SELECT name, service_type, api_url, api_key, config FROM external_kb_services WHERE id = :sid"), {"sid": ext_service_id} ) row = result.fetchone() @@ -1103,7 +1103,7 @@ async def sync_knowledge_base( setattr(kb, "external_id", ext_kb_id) except Exception: db.execute( - "UPDATE knowledge_bases SET external_id = :eid WHERE id = :kid", + text("UPDATE knowledge_bases SET external_id = :eid WHERE id = :kid"), {"eid": ext_kb_id, "kid": kb_id} ) else: @@ -1158,7 +1158,7 @@ async def sync_knowledge_base( setattr(kb, "external_id", ext_kb_id) except Exception: db.execute( - "UPDATE knowledge_bases SET external_id = :eid WHERE id = :kid", + text("UPDATE knowledge_bases SET external_id = :eid WHERE id = :kid"), {"eid": ext_kb_id, "kid": kb_id} ) @@ -1210,7 +1210,7 @@ async def sync_knowledge_base( setattr(kb, "external_id", ext_kb_id) except Exception: db.execute( - "UPDATE knowledge_bases SET external_id = :eid WHERE id = :kid", + text("UPDATE knowledge_bases SET external_id = :eid WHERE id = :kid"), {"eid": ext_kb_id, "kid": kb_id} ) @@ -1255,7 +1255,7 @@ async def sync_knowledge_base( setattr(kb, "external_sync_status", "synced" if sync_result["synced"] else "error") except Exception: db.execute( - "UPDATE knowledge_bases SET external_sync_status = :es WHERE id = :kid", + text("UPDATE knowledge_bases SET external_sync_status = :es WHERE id = :kid"), {"es": "synced" if sync_result["synced"] else "error", "kid": kb_id} ) @@ -1271,7 +1271,7 @@ async def sync_knowledge_base( setattr(kb, "external_sync_status", "error") except Exception: db.execute( - "UPDATE knowledge_bases SET external_sync_status = 'error' WHERE id = :kid", + text("UPDATE knowledge_bases SET external_sync_status = 'error' WHERE id = :kid"), {"kid": kb_id} ) db.commit()