Python 语言 用 FastAPI 构建学生信息管理 API CRUD 操作

Python阿木 发布于 8 小时前 1 次阅读


FastAPI 学生信息管理 API(CRUD 操作)实现

随着互联网技术的飞速发展,API(应用程序编程接口)已成为现代软件开发中不可或缺的一部分。FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于标准 Python 类型提示,具有异步支持。本文将围绕 Python 语言,使用 FastAPI 框架构建一个学生信息管理 API,实现基本的 CRUD(创建、读取、更新、删除)操作。

环境准备

在开始之前,请确保您已经安装了以下软件:

- Python 3.6 或更高版本
- FastAPI
- uvicorn(用于运行 FastAPI 应用)

您可以使用以下命令安装所需的包:

bash
pip install fastapi uvicorn

项目结构

以下是一个简单的项目结构示例:


student_api/

├── main.py FastAPI 应用主文件
├── models.py 数据模型定义
├── schemas.py 数据验证和序列化
└── database.py 数据库操作

数据模型定义

在 `models.py` 文件中,我们定义学生信息的数据模型。

python
from pydantic import BaseModel

class Student(BaseModel):
id: int
name: str
age: int
grade: str

数据验证和序列化

在 `schemas.py` 文件中,我们定义学生信息的验证和序列化。

python
from pydantic import BaseModel

class StudentCreate(BaseModel):
name: str
age: int
grade: str

class StudentUpdate(BaseModel):
name: str = None
age: int = None
grade: str = None

数据库操作

在 `database.py` 文件中,我们定义数据库操作。

python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

class Student(Base):
__tablename__ = "students"

id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
age = Column(Integer, index=True)
grade = Column(String, index=True)

def __repr__(self):
return f""

def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()

FastAPI 应用主文件

在 `main.py` 文件中,我们创建 FastAPI 应用,并定义 CRUD 操作的路由。

python
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from . import models, schemas, database

app = FastAPI()

def get_db():
db = database.SessionLocal()
try:
yield db
finally:
db.close()

@app.post("/students/", response_model=schemas.Student)
def create_student(student: schemas.StudentCreate, db: Session = Depends(get_db)):
db_student = models.Student(name=student.name, age=student.age, grade=student.grade)
db.add(db_student)
db.commit()
db.refresh(db_student)
return db_student

@app.get("/students/", response_model=list[schemas.Student])
def read_students(db: Session = Depends(get_db)):
students = db.query(models.Student).all()
return students

@app.get("/students/{student_id}", response_model=schemas.Student)
def read_student(student_id: int, db: Session = Depends(get_db)):
db_student = db.query(models.Student).filter(models.Student.id == student_id).first()
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
return db_student

@app.put("/students/{student_id}", response_model=schemas.Student)
def update_student(student_id: int, student: schemas.StudentUpdate, db: Session = Depends(get_db)):
db_student = db.query(models.Student).filter(models.Student.id == student_id).first()
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
db_student.name = student.name
db_student.age = student.age
db_student.grade = student.grade
db.commit()
db.refresh(db_student)
return db_student

@app.delete("/students/{student_id}", status_code=204)
def delete_student(student_id: int, db: Session = Depends(get_db)):
db_student = db.query(models.Student).filter(models.Student.id == student_id).first()
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
db.delete(db_student)
db.commit()
return {"detail": "Student deleted successfully"}

运行 FastAPI 应用

在终端中,运行以下命令启动 FastAPI 应用:

bash
uvicorn main:app --reload

现在,您可以使用 Postman 或其他 API 测试工具测试我们的学生信息管理 API。

总结

本文介绍了如何使用 FastAPI 框架和 Python 语言构建一个学生信息管理 API,实现了基本的 CRUD 操作。通过本文的学习,您应该能够掌握以下技能:

- 使用 FastAPI 框架创建 API
- 定义数据模型和验证
- 使用 SQLAlchemy 进行数据库操作
- 实现 CRUD 操作

希望本文对您有所帮助!