fix: 修复 SQLAlchemy case() 语法
All checks were successful
continuous-integration/drone/push Build is passing

- admin.py: 使用 case() 替代 func.case()
- task_service.py: 同上
- 已在服务器执行数据库迁移创建 user_course_progress 表
This commit is contained in:
yuliang_guo
2026-01-30 15:11:57 +08:00
parent 406efa6f14
commit ef7a41ba01
2 changed files with 4 additions and 4 deletions

View File

@@ -6,7 +6,7 @@ from typing import Optional, List, Dict, Any
from datetime import datetime, timedelta from datetime import datetime, timedelta
from fastapi import APIRouter, Depends, Query from fastapi import APIRouter, Depends, Query
from sqlalchemy.ext.asyncio import AsyncSession 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.core.deps import get_current_active_user as get_current_user, get_db
from app.models.user import User from app.models.user import User
@@ -216,7 +216,7 @@ async def get_course_completion_data(
select( select(
func.count(UserCourseProgress.id).label('total'), func.count(UserCourseProgress.id).label('total'),
func.sum( func.sum(
func.case( case(
(UserCourseProgress.status == ProgressStatus.COMPLETED.value, 1), (UserCourseProgress.status == ProgressStatus.COMPLETED.value, 1),
else_=0 else_=0
) )

View File

@@ -3,7 +3,7 @@
""" """
from typing import List, Optional from typing import List, Optional
from datetime import datetime 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.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from app.models.task import Task, TaskCourse, TaskAssignment, TaskStatus, AssignmentStatus from app.models.task import Task, TaskCourse, TaskAssignment, TaskStatus, AssignmentStatus
@@ -154,7 +154,7 @@ class TaskService(BaseService[Task]):
stmt = select( stmt = select(
func.count(TaskAssignment.id).label('total'), func.count(TaskAssignment.id).label('total'),
func.sum( func.sum(
func.case( case(
(TaskAssignment.status == AssignmentStatus.COMPLETED, 1), (TaskAssignment.status == AssignmentStatus.COMPLETED, 1),
else_=0 else_=0
) )