上传文件至「/」
This commit is contained in:
+17
@@ -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")
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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() # 请求结束后无论如何都要关闭会话,避免连接泄漏
|
||||
@@ -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)
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user