Tortoise ORM
Tortoise ORM 是一个异步 ORM 框架,它专为 asyncio 编写。它与 SQLAlchemy 类似,提供了灵活的查询语言和完整的事务支持,但是它的重点是使用异步 I/O 进行高效的数据库访问。
使用 Tortoise ORM 连接数据库的第一步是安装 Tortoise ORM:
代码语言:javascript复制pip install tortoise-orm
然后,需要定义一个名为 Tortoise
的全局实例,并使用它来初始化数据库连接:
from tortoise import Tortoise
from tortoise.contrib.fastapi import register_tortoise
DB_URL = "sqlite://db.sqlite3"
Tortoise.init(db_url=DB_URL, modules={"models": ["app.models"]})
Tortoise.generate_schemas()
在这个示例中,我们使用的是 SQLite 数据库,并定义了一个名为 models
的 Python 模块,其中包含所有数据库模型类的定义。Tortoise.init
函数初始化数据库连接,并使用 Tortoise.generate_schemas
函数自动创建数据库表。
使用 Tortoise ORM 进行 CRUD 操作与使用 SQLAlchemy 相同。只需定义数据库模型类,然后使用 Tortoise 实例进行操作。例如,以下是一个使用 Tortoise ORM 定义用户模型的示例:
代码语言:javascript复制from tortoise.models import Model
from tortoise import fields
class User(Model):
id = fields.IntField(pk=True)
username = fields.CharField(max_length=100, unique=True)
email = fields.CharField(max_length=100, unique=True)
password_hash = fields.CharField(max_length=100)
is_active = fields.BooleanField(default=True)
这个模型类定义了一个 User
类,它映射到一个名为 user
的数据库表。表中有几个列,包括 id
、username
、email
、password_hash
和 is_active
。
使用 Tortoise ORM 进行 CRUD 操作与使用 SQLAlchemy 相同。例如,以下代码向数据库中插入一个新用户:
代码语言:javascript复制from tortoise.contrib.fastapi import HTTPNotFoundError
from tortoise.contrib.pydantic import pydantic_model_creator
from fastapi import APIRouter, Depends, HTTPException, status
from app.models import User
from app.schemas import UserCreate, UserOut
router = APIRouter()
user_schema = pydantic_model_creator(User)
user_create_schema = pydantic_model_creator(UserCreate, exclude_readonly=True)
@router.post("/", response_model=UserOut, status_code=status.HTTP_201_CREATED)
async def create_user(user: UserCreate, db: AsyncIOMotorClient = Depends(get_database)):
user_obj = User(**user.dict())
user_obj.password = get_password_hash(user_obj.password)
await user_obj.commit()
return await user_schema.from_tortoise_orm(user_obj)
这个路由函数定义了一个 create_user
路由,该路由接受一个 UserCreate
对象和一个 db
依赖项(该依赖项定义在 get_database
函数中),并将该用户添加到数据库中。它使用 pydantic_model_creator
函数创建一个 Pydantic 模型来序列化和反序列化数据库模型,并返回一个 UserOut
对象。