一、环境搭建

在开始使用 FastAPI 和 Tortoise-ORM 之前,首先需要搭建开发环境。确保你的系统中已经安装了 Python,推荐使用 Python 3.7 及以上版本

1. 创建虚拟环境

2. 安装依赖

在激活虚拟环境后,通过pip安装 FastAPI、Tortoise-ORM 以及相关的数据库驱动。这里以 SQLite 数据库为例,若使用其他数据库(如 MySQLPostgreSQL),请安装对应的驱动:

pip3 install fastapi tortoise-orm uvicorn aiosqlite

其中,uvicorn是 FastAPI 的 ASGI 服务器,aiosqlite是用于 SQLite 的异步数据库驱动

二、项目结构

简单的 FastAPI 与 Tortoise-ORM 项目结构可以如下:

myproject/
├── app/
│   ├── models.py
│   ├── routers/
│   │   └── example.py
│   └── main.py
└── config.py
  • config.py:用于配置数据库连接等项目相关的配置信息
  • app/models.py:定义数据库模型
  • app/routers/example.py:编写 API 路由。
  • app/main.py:FastAPI 应用的入口文件

​三、配置数据库连接

config.py文件中,配置 Tortoise-ORM 的数据库连接信息:

DATABASE_CONFIG = {
    "connections": {
        "default": "sqlite://db.sqlite3"
    },
    "apps": {
        "models": {
            "models": ["app.models", "aerich.models"],
            "default_connection": "default"
        }
    }
}

上述配置中,connections定义了数据库连接字符串,这里使用 SQLite 数据库,数据库文件为db.sqlite3。apps部分指定了模型所在的模块,aerich.models是 Tortoise-ORM 用于数据库迁移的模块

四、定义数据库模型

app/models.py文件中,使用 Tortoise-ORM 定义数据库模型。以一个简单的User模型为例:

from tortoise import fields, models


class User(models.Model):
    id = fields.IntField(pk=True)
    username = fields.CharField(max_length=50, unique=True)
    email = fields.CharField(max_length=100)
    password = fields.CharField(max_length=100)

    def __str__(self):
        return self.username

在上述代码中,User类继承自models.Model,定义了idusernameemailpassword等字段。id字段是主键,username字段设置为唯一

五、初始化 Tortoise-ORM

from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise
from config import DATABASE_CONFIG

app = FastAPI()

register_tortoise(
    app,
    config=DATABASE_CONFIG,
    generate_schemas=True,
    add_exception_handlers=True
)

register_tortoise函数用于将 Tortoise-ORM 与 FastAPI 应用进行集成。generate_schemas=True表示在应用启动时自动生成数据库表结构,add_exception_handlers=True则添加了 Tortoise-ORM 相关的异常处理

六、编写 API 路由

app/routers/example.py文件中,编写 API 路由,实现对数据库的增删改查操作:

from fastapi import APIRouter, HTTPException
from tortoise.contrib.fastapi import HTTPNotFoundError
from app.models import User

router = APIRouter()


@router.post("/users/", response_model=User)
async def create_user(user: User):
    user_obj = await User.create(**user.dict(exclude_unset=True))
    return user_obj


@router.get("/users/{user_id}", response_model=User, responses={404: {"model": HTTPNotFoundError}})
async def read_user(user_id: int):
    try:
        return await User.get(id=user_id)
    except User.DoesNotExist:
        raise HTTPException(status_code=404, detail="User not found")


@router.put("/users/{user_id}", response_model=User, responses={404: {"model": HTTPNotFoundError}})
async def update_user(user_id: int, user: User):
    try:
        user_obj = await User.get(id=user_id)
        for key, value in user.dict(exclude_unset=True).items():
            setattr(user_obj, key, value)
        await user_obj.save()
        return user_obj
    except User.DoesNotExist:
        raise HTTPException(status_code=404, detail="User not found")


@router.delete("/users/{user_id}", responses={404: {"model": HTTPNotFoundError}})
async def delete_user(user_id: int):
    try:
        user_obj = await User.get(id=user_id)
        await user_obj.delete()
        return {"message": "User deleted successfully"}
    except User.DoesNotExist:
        raise HTTPException(status_code=404, detail="User not found")

上述代码定义了四个 API 接口,分别用于创建用户、获取用户、更新用户和删除用户。每个接口都通过 Tortoise-ORM 的异步方法与数据库进行交互,并处理可能出现的异常情况

七、注册路由

在`app/main.py文件中,将定义好的路由注册到 FastAPI 应用中:

from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise
from config import DATABASE_CONFIG
from app.routers.example import router

app = FastAPI()

app.include_router(router)

register_tortoise(
    app,
    config=DATABASE_CONFIG,
    generate_schemas=True,
    add_exception_handlers=True
)

八、运行项目

在项目根目录下,使用以下命令启动 FastAPI 应用:

uvicorn app.main:app --reload

--reload参数表示在代码发生变化时自动重新加载应用,方便开发调试。启动成功后,就可以通过 API 接口对数据库进行操作了。​

通过以上步骤,我们完成了 FastAPI 与 Tortoise-ORM 的基础整合与使用。Tortoise-ORM 提供了丰富的查询和操作方法,结合 FastAPI 的高性能,可以快速构建出功能强大的 Web API。后续还可以进一步学习数据库迁移、复杂查询等高级功能,提升项目开发效率。​

以上内容展示了 FastAPI 与 Tortoise-ORM 搭配的基础操作。若你想了解高级查询、数据库迁移等进阶内容,或有其他需求,欢迎随时和我说。​

最后修改:2025 年 06 月 09 日
如果觉得我的文章对你有用,请随意赞赏