一、环境搭建
在开始使用 FastAPI 和 Tortoise-ORM 之前,首先需要搭建开发环境。确保你的系统中已经安装了 Python,推荐使用 Python 3.7 及以上版本
1. 创建虚拟环境
2. 安装依赖
在激活虚拟环境后,通过pip
安装 FastAPI、Tortoise-ORM 以及相关的数据库驱动。这里以 SQLite
数据库为例,若使用其他数据库(如 MySQL
、PostgreSQL
),请安装对应的驱动:
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
,定义了id
、username
、email
和password
等字段。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 搭配的基础操作。若你想了解高级查询、数据库迁移等进阶内容,或有其他需求,欢迎随时和我说。