修改main文件
新增统计api 新增统计请求模型
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
# api/stats
|
||||||
|
# 本文件定义统计分析相关的所有 API 路由(Controller 层)
|
||||||
|
from itertools import count
|
||||||
|
|
||||||
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from database import get_db
|
||||||
|
from dao.users_dao import UserDAO
|
||||||
|
from scheme.statistics_scheme import StatsResponse
|
||||||
|
from scheme.users import UserCreate, UserUpdate, UserResponse
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
# **多维度班级统计**:统计每个班级的总人数,以及按性别(男、女)细分的人数分布。
|
||||||
|
@router.get("/class/stats/gender", response_model=List[StatsResponse])
|
||||||
|
def get_class_stats(db: Session = Depends(get_db)):
|
||||||
|
sbg = db.query(StuInfo.cls_id, count(StuInfo.id)).group_by(StuInfo.cls_id, StuInfo.gender).all()
|
||||||
@@ -5,7 +5,7 @@ from fastapi import FastAPI
|
|||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
from database import engine, Base
|
from database import engine, Base
|
||||||
from api1 import users # 导入 users 子路由
|
from api1 import users, statistics_api # 导入 users 子路由
|
||||||
|
|
||||||
# 1. 创建数据库表(如果表不存在)
|
# 1. 创建数据库表(如果表不存在)
|
||||||
# Base.metadata.create_all 会扫描所有继承 Base 的模型,生成对应的 CREATE TABLE 语句
|
# Base.metadata.create_all 会扫描所有继承 Base 的模型,生成对应的 CREATE TABLE 语句
|
||||||
@@ -32,6 +32,8 @@ app.add_middleware(
|
|||||||
# prefix 为路由前缀,所有用户接口都以 /api/users 开头
|
# prefix 为路由前缀,所有用户接口都以 /api/users 开头
|
||||||
app.include_router(users.router, prefix="/api/users", tags=["用户管理"])
|
app.include_router(users.router, prefix="/api/users", tags=["用户管理"])
|
||||||
|
|
||||||
|
app.include_router(statistics_api.router, prefix="/api/stats", tags=["统计分析"])
|
||||||
|
|
||||||
# 5. 根路径
|
# 5. 根路径
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
async def root():
|
async def root():
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# scheme/statistics_scheme.py
|
||||||
|
from pydantic import BaseModel, Field, EmailStr
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
# ---------- 请求模型 ----------
|
||||||
|
# class UserCreate(BaseModel):
|
||||||
|
# username: str = Field(..., min_length=3, max_length=50)
|
||||||
|
# email: EmailStr
|
||||||
|
# full_name: Optional[str] = Field(None, max_length=100)
|
||||||
|
#
|
||||||
|
# class UserUpdate(BaseModel):
|
||||||
|
# username: Optional[str] = Field(None, min_length=3, max_length=50)
|
||||||
|
# email: Optional[EmailStr] = None
|
||||||
|
# full_name: Optional[str] = Field(None, max_length=100)
|
||||||
|
|
||||||
|
# ---------- 响应模型 ----------
|
||||||
|
# 多维度班级统计
|
||||||
|
class StatsResponse(BaseModel):
|
||||||
|
total_count: int
|
||||||
|
man_count: int
|
||||||
|
female_count: int
|
||||||
Reference in New Issue
Block a user