fix: SQLAlchemy 2.0 text() wrapper for raw SQL in knowledge_admin.py

This commit is contained in:
qyyfw committed 2026-07-02 22:56:48 +08:00
1 parent 4adc3fc054
commit 855e1cb9c6
1 file changed
+20 -20
+20 -20
View File
@@ -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()