上传文件至「/」

This commit is contained in:
2026-09-21 21:02:30 +08:00
parent 8f5f7682bd
commit bb716df5a1
5 changed files with 107 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base, relationship
from database import Base
class Advisor(Base):
__tablename__ = 'advisor'
id = Column(Integer, primary_key=True, autoincrement=True)
advisor_no = Column(String(32), unique=True, nullable=False)
name = Column(String(50), nullable=False)
gender = Column(String(2), nullable=False)
phone = Column(String(20), nullable=False)
remark=Column(String(500), nullable=True)
statu = Column(Integer, default=1, nullable=False)
students=relationship("Student", back_populates="advisor")
+15
View File
@@ -0,0 +1,15 @@
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import relationship
from database import Base
from model.teacher_class import teacher_class
# 班级信息表
class ClassInfo(Base):
__tablename__="classinfo"
id=Column(Integer,primary_key=True,autoincrement=True)
class_name=Column(String(50),nullable=False,unique=True)
start_time=Column(Date)
statu=Column(Integer,default=1) # 逻辑删除表字段 1代表存在
teachers=relationship("Teacher",secondary=teacher_class,back_populates="classinfo")
students= relationship("Student",back_populates="classinfo")
+24
View File
@@ -0,0 +1,24 @@
# ============================================================
# database.py —— 数据库连接与会话管理
# 职责:创建 SQLAlchemy 引擎、会话工厂,并提供 FastAPI 依赖注入用的 get_db
# ============================================================
from sqlalchemy import create_engine # 创建数据库引擎
from sqlalchemy.orm import sessionmaker # 创建会话工厂
from model import Base # 导入 ORM 基类(所有模型都继承它)
# 数据库引擎:连接 MySQL(驱动 pymysql),目标库名为 fastapi0814
# 连接串格式:mysql+pymysql://用户名:密码@主机/数据库名
engine = create_engine("mysql+pymysql://root:123456@localhost/fastapi0814")
# 会话工厂:用于生成数据库会话对象
# autocommit=False 表示手动提交事务;autoflush=False 表示查询前不自动刷写
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# FastAPI 依赖函数:通过 Depends(get_db) 注入数据库会话
def get_db():
db = SessionLocal() # 创建新会话
try:
yield db # 把会话交给业务代码使用
finally:
db.close() # 请求结束后无论如何都要关闭会话,避免连接泄漏
+34
View File
@@ -0,0 +1,34 @@
# ============================================================
# main.py —— 系统启动入口
# 职责:创建 FastAPI 应用、注册各业务模块的路由,并启动服务
# ============================================================
import uvicorn # ASGI 服务器,用于运行 FastAPI 应用
from fastapi import FastAPI
# 导入各业务模块的路由器(api 包下每个文件对应一个业务模块)
from api import student_api,employment_api,advisor_api,teacher_api,score_api,classinfo_api,api_analysis
# 创建 FastAPI 应用实例;title 会显示在 Swagger 接口文档中
app = FastAPI(title="沃林学生管理系统", version="1.0.0")
# 注册学生模块路由:所有接口挂载在 /students 前缀下
app.include_router(student_api.router, prefix="/students", tags=["学生模块"])
# 注册就业模块路由:所有接口挂载在 /employment 前缀下
app.include_router(employment_api.router,prefix="/employment",tags=["就业模块"])
# 注册顾问模块路由:所有接口挂载在 /advisor 前缀下
app.include_router(advisor_api.router,prefix="/advisor",tags=["顾问模块"])
# 注册教师模块路由:所有接口挂载在 /teacher 前缀下
app.include_router(teacher_api.router,prefix="/teacher",tags=["教师模块"])
# 注册成绩模块路由:所有接口挂载在 /score 前缀下
app.include_router(score_api.router,prefix="/score",tags=["成绩模块"])
# 注册班级模块路由:所有接口挂载在 /classinfo 前缀下
app.include_router(classinfo_api.router,prefix="/classinfo",tags=["班级模块"])
# 注册统计分析模块路由:所有接口挂载在 /analysis 前缀下
app.include_router(api_analysis.router,prefix="/analysis",tags=["统计分析模块"])
# 仅在直接运行本文件时执行(python main.py)
if __name__=="__main__":
# 如需在启动时自动建表,可取消下行注释(需要提前建好数据库)
# Base.metadata.create_all(bind=engine)
# 启动开发服务器:监听 localhost:8051,reload=True 开启代码热重载
uvicorn.run("main:app",host="localhost",port=8051,reload=True)
+17
View File
@@ -0,0 +1,17 @@
# model/score.py
from sqlalchemy import Column, Integer, Float, ForeignKey, DateTime
from sqlalchemy.orm import relationship
from datetime import datetime
from database import Base
class Score(Base):
__tablename__ = "score"
id = Column(Integer, primary_key=True, autoincrement=True) # 主键
student_id = Column(Integer, ForeignKey("student.id"), nullable=False) #外键
exam_seq = Column(Integer, nullable=False)
score = Column(Float, nullable=False)
is_warning = Column(Integer, default=0) #低分预警 0正常 1不及格
is_deleted = Column(Integer, default=0) #是否被逻辑删除
create_time = Column(DateTime, default=datetime.now)
student = relationship("Student", back_populates="scores")