02. 零基础小白直接上手FastAPI

1067 字约 3 分钟读完440 次阅读更新于 2026/5/3

Pyhton 菜鸟教程

FastAPI 是一个比较新的 Python 的 Web 框架

管理系统、网站、数据分析需要展示

环境要求

python 版本:3.12

Pycharm 2024.1

MySQL8.0

Navicat17

建议使用 exe 安装 python

https://www.python.org/ftp/python/3.12.10/python-3.12.10-amd64.exe

Mysql 安装:https://dev.mysql.com/downloads/installer/

配置 pip

%AppData% 新建 pip 文件夹 再新建一个 pip.ini 文件

[global]
index-url = http://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

**pip config list ** 查看本地配置的镜像

新建项目

项目名称是 fastapi-app,注意放在外层目录里面

打开外层的目录,标识 fastapi-app 为源码目录

Http 的请求类型

查询:get

新增:ppost

修改:put

删除:delete

创建数据库和表

数据库:fastapi_vue3

CREATE TABLE `student` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学号',
  `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
  `clazz` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '班级',
  `major` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '专业',
  `college` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学院',
  `phone` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机',
  `email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
  `address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生信息';
INSERT INTO `fastapi_vue3`.`student` (`id`, `no`, `name`, `clazz`, `major`, `college`, `phone`, `email`, `address`) VALUES (1, '20231001', '青哥哥', '计科1班', '计算机科学与技术', '计算机学院', '13699885599', 'qgg@163.com', '安徽合肥');
INSERT INTO `fastapi_vue3`.`student` (`id`, `no`, `name`, `clazz`, `major`, `college`, `phone`, `email`, `address`) VALUES (2, '20231002', '小林', '计科2班', '计算机科学与技术', '计算机学院', '13588557788', 'xiaolin@163.com', '江苏南京');
INSERT INTO `fastapi_vue3`.`student` (`id`, `no`, `name`, `clazz`, `major`, `college`, `phone`, `email`, `address`) VALUES (3, '20231003', '小王', '计科3班', '计算机科学与技术', '计算机学院', '13577998822', 'xiaow@163.com', '河南郑州');

项目依赖

requirement.txt

fastapi
uvicorn
tortoise-orm   # 需要单独安装
aiomysql   # 需要单独安装

安装:

pip install tortoise-orm
pip install aiomysql

数据库配置 setings.py

TORTOISE_ORM = {
    "connections": {
        "default": {
            "engine": "tortoise.backends.mysql",
            "credentials": {
                "host": "localhost",
                "port": 3306,
                "database": "fastapi_vue3",  # 数据库名称
                "user": "root",
                "password": "123456",  # 数据库密码
                "minsize": 1,
                "maxsize": 10,
                "charset": "utf8mb4",
                "echo": True
            }
        },
    },
    "apps": {
        "models": {
            "models": ["models"],
            "default_connection": "default",
        }
    },
    "use_tz": True,  # 是否使用时区
    "timezone": "Asia/Shanghai"
}


main.py 里面注册 orm

from tortoise.contrib.fastapi import register_tortoise


# 注册 orm
register_tortoise(app, config=TORTOISE_ORM, add_exception_handlers=True)

设置 uvicorn 启动

import uvicorn


if __name__ == "__main__":
    uvicorn.run("main:app", reload=True, port=9090)

设置 Model

创建 models.py 文件

from tortoise import fields
from tortoise.models import Model


class Student(Model):
    id = fields.IntField(primary_key=True)
    no = fields.CharField(max_length=255, null=True)
    name = fields.CharField(max_length=255, null=True)
    clazz = fields.CharField(max_length=255, null=True)
    major = fields.CharField(max_length=255, null=True)
    college = fields.CharField(max_length=255, null=True)
    phone = fields.CharField(max_length=255, null=True)
    email = fields.CharField(max_length=255, null=True)
    address = fields.CharField(max_length=255, null=True)

    class Meta:
        table_name = 'student'


然后你就可以写接口,实现学生的模糊查询

@app.get("/student/selectAll")
async def select_all(name: str = '', no: str = ''):
    stu_list = await Student.filter(name__contains=name).filter(no__contains=no)
    return stu_list


整个的 main.py

from fastapi import FastAPI
import uvicorn
from tortoise.contrib.fastapi import register_tortoise

from models import Student
from settings import TORTOISE_ORM

app = FastAPI()

# 注册 orm
register_tortoise(app, config=TORTOISE_ORM, add_exception_handlers=True)


@app.get("/student/selectAll")
async def select_all(name: str = '', no: str = ''):
    stu_list = await Student.filter(name__contains=name).filter(no__contains=no)
    return stu_list


if __name__ == "__main__":
    uvicorn.run("main:app", reload=True, port=9090)