From ef7a41ba014874bc2b9923b18fff47c86bd32d43 Mon Sep 17 00:00:00 2001 From: yuliang_guo Date: Fri, 30 Jan 2026 15:11:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20SQLAlchemy=20case()?= =?UTF-8?q?=20=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - admin.py: 使用 case() 替代 func.case() - task_service.py: 同上 - 已在服务器执行数据库迁移创建 user_course_progress 表 --- backend/app/api/v1/admin.py | 4 ++-- backend/app/services/task_service.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/app/api/v1/admin.py b/backend/app/api/v1/admin.py index bc037a6..f7ce13c 100644 --- a/backend/app/api/v1/admin.py +++ b/backend/app/api/v1/admin.py @@ -6,7 +6,7 @@ from typing import Optional, List, Dict, Any from datetime import datetime, timedelta from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import select, func +from sqlalchemy import select, func, case from app.core.deps import get_current_active_user as get_current_user, get_db from app.models.user import User @@ -216,7 +216,7 @@ async def get_course_completion_data( select( func.count(UserCourseProgress.id).label('total'), func.sum( - func.case( + case( (UserCourseProgress.status == ProgressStatus.COMPLETED.value, 1), else_=0 ) diff --git a/backend/app/services/task_service.py b/backend/app/services/task_service.py index f6b30dc..6e6aa61 100644 --- a/backend/app/services/task_service.py +++ b/backend/app/services/task_service.py @@ -3,7 +3,7 @@ """ from typing import List, Optional from datetime import datetime -from sqlalchemy import select, func, and_ +from sqlalchemy import select, func, and_, case from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import joinedload from app.models.task import Task, TaskCourse, TaskAssignment, TaskStatus, AssignmentStatus @@ -154,7 +154,7 @@ class TaskService(BaseService[Task]): stmt = select( func.count(TaskAssignment.id).label('total'), func.sum( - func.case( + case( (TaskAssignment.status == AssignmentStatus.COMPLETED, 1), else_=0 )