fix: SQLAlchemy 2.0 text() wrapper for raw SQL in knowledge_admin.py
This commit is contained in:
1 parent
4adc3fc054
commit
855e1cb9c6
1 file changed
+20
-20
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user