响应格式修改,原始数据查询修改
This commit is contained in:
@@ -3,6 +3,7 @@ from sqlalchemy.orm import Session
|
||||
from typing import List, Optional
|
||||
import base64
|
||||
from ..core.database import get_db
|
||||
from ..core.response_code import ResponseCode, ResponseMessage
|
||||
from ..schemas.database import (
|
||||
SQLExecuteRequest, SQLExecuteResponse, TableDataRequest,
|
||||
TableDataResponse, CreateTableRequest, ImportDataRequest, FileImportFormData
|
||||
@@ -15,7 +16,11 @@ router = APIRouter(prefix="/database", tags=["数据库管理"])
|
||||
def execute_sql(request: SQLExecuteRequest, db: Session = Depends(get_db)):
|
||||
"""执行SQL语句"""
|
||||
result = DatabaseService.execute_sql(db, request.sql)
|
||||
return SQLExecuteResponse(**result)
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.DATABASE_ERROR,
|
||||
message=result['message'],
|
||||
data=result.get('data')
|
||||
)
|
||||
|
||||
@router.post("/table-data", response_model=TableDataResponse)
|
||||
def get_table_data(request: TableDataRequest, db: Session = Depends(get_db)):
|
||||
@@ -26,7 +31,12 @@ def get_table_data(request: TableDataRequest, db: Session = Depends(get_db)):
|
||||
request.limit or 100,
|
||||
request.offset or 0
|
||||
)
|
||||
return TableDataResponse(**result)
|
||||
return TableDataResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.DATABASE_ERROR,
|
||||
message=result['message'],
|
||||
total=result.get('total_count'),
|
||||
data=result.get('data')
|
||||
)
|
||||
|
||||
@router.post("/create-table", response_model=SQLExecuteResponse)
|
||||
def create_table(request: CreateTableRequest, db: Session = Depends(get_db)):
|
||||
@@ -37,28 +47,48 @@ def create_table(request: CreateTableRequest, db: Session = Depends(get_db)):
|
||||
request.columns,
|
||||
request.primary_key
|
||||
)
|
||||
return SQLExecuteResponse(**result)
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.DATABASE_ERROR,
|
||||
message=result['message'],
|
||||
data=None
|
||||
)
|
||||
|
||||
@router.post("/drop-table")
|
||||
@router.post("/drop-table", response_model=SQLExecuteResponse)
|
||||
def drop_table(request: dict, db: Session = Depends(get_db)):
|
||||
"""删除表"""
|
||||
table_name = request.get("table_name")
|
||||
if not table_name:
|
||||
raise HTTPException(status_code=400, detail="table_name is required")
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.BAD_REQUEST,
|
||||
message="table_name is required",
|
||||
data=None
|
||||
)
|
||||
result = DatabaseService.drop_table(db, table_name)
|
||||
return SQLExecuteResponse(**result)
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.DATABASE_ERROR,
|
||||
message=result['message'],
|
||||
data=None
|
||||
)
|
||||
|
||||
@router.post("/import-data", response_model=SQLExecuteResponse)
|
||||
def import_data(request: ImportDataRequest, db: Session = Depends(get_db)):
|
||||
"""导入数据"""
|
||||
result = DatabaseService.import_data(db, request.table_name, request.data)
|
||||
return SQLExecuteResponse(**result)
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.DATABASE_ERROR,
|
||||
message=result['message'],
|
||||
data=None
|
||||
)
|
||||
|
||||
@router.post("/tables", response_model=SQLExecuteResponse)
|
||||
def get_table_list():
|
||||
"""获取所有表名"""
|
||||
result = DatabaseService.get_table_list()
|
||||
return SQLExecuteResponse(**result)
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.DATABASE_ERROR,
|
||||
message=result['message'],
|
||||
data=result.get('data')
|
||||
)
|
||||
|
||||
@router.post("/import-file", response_model=SQLExecuteResponse)
|
||||
async def import_file(
|
||||
@@ -71,34 +101,46 @@ async def import_file(
|
||||
try:
|
||||
# 检查文件类型
|
||||
if not file.filename:
|
||||
raise HTTPException(status_code=400, detail="文件名不能为空")
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.BAD_REQUEST,
|
||||
message="文件名不能为空",
|
||||
data=None
|
||||
)
|
||||
|
||||
# 处理中文文件名和后缀名 - 更可靠的方法
|
||||
# 处理中文文件名和后缀名
|
||||
try:
|
||||
# FastAPI的UploadFile已经正确处理了文件名编码
|
||||
filename = file.filename
|
||||
except:
|
||||
filename = "unknown_file"
|
||||
|
||||
if not filename or filename == "":
|
||||
raise HTTPException(status_code=400, detail="文件名不能为空")
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.BAD_REQUEST,
|
||||
message="文件名不能为空",
|
||||
data=None
|
||||
)
|
||||
|
||||
# 提取文件扩展名
|
||||
if '.' not in filename:
|
||||
raise HTTPException(status_code=400, detail="文件必须有扩展名")
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.BAD_REQUEST,
|
||||
message="文件必须有扩展名",
|
||||
data=None
|
||||
)
|
||||
|
||||
file_ext = filename.lower().split('.')[-1]
|
||||
|
||||
if file_ext not in ['csv', 'xlsx', 'xls']:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"不支持的文件类型: .{file_ext},仅支持 .csv, .xlsx, .xls"
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.BAD_REQUEST,
|
||||
message=f"不支持的文件类型: .{file_ext},仅支持 .csv, .xlsx, .xls",
|
||||
data=None
|
||||
)
|
||||
|
||||
# 读取文件内容
|
||||
file_content = await file.read()
|
||||
|
||||
# 将文件内容转换为base64(保持与现有FileImportUtils兼容)
|
||||
# 将文件内容转换为base64
|
||||
file_content_base64 = base64.b64encode(file_content).decode('utf-8')
|
||||
|
||||
# 调用服务层方法
|
||||
@@ -106,12 +148,15 @@ async def import_file(
|
||||
db, filename, file_content_base64, table_name, force_overwrite
|
||||
)
|
||||
|
||||
return SQLExecuteResponse(**result)
|
||||
return SQLExecuteResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.IMPORT_FAILED,
|
||||
message=result['message'],
|
||||
data=result.get('data') if result.get('success') else None
|
||||
)
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
return SQLExecuteResponse(
|
||||
success=False,
|
||||
message=f"文件导入失败: {str(e)}"
|
||||
code=ResponseCode.IMPORT_FAILED,
|
||||
message=f"文件导入失败: {str(e)}",
|
||||
data=None
|
||||
)
|
||||
Reference in New Issue
Block a user