文章目录
轻松上手!Tortoise ORM:专为异步开发打造的 Python ORM
Tortoise ORM 是一个异步 ORM(对象关系映射)库,旨在简化数据库操作,尤其适合与 Python 异步框架(如 asyncio
、FastAPI
、aiohttp
等)一起使用。它的设计灵感来自于 Django ORM,因此对于熟悉 Django 的开发者来说,Tortoise ORM 的使用非常直观。
Tortoise ORM 主要特点:
- 异步支持:Tortoise ORM 是为异步应用程序设计的,支持
async/await
语法,可以处理大量并发请求而不阻塞事件循环。 - Django 风格:Tortoise ORM 的 API 和 Django ORM 很相似,因此对于熟悉 Django 的开发者,迁移到 Tortoise ORM 是非常容易的。
- 多种数据库支持:Tortoise ORM 支持多个数据库,包括 SQLite、PostgreSQL、MySQL 等。
- 简单易用:虽然功能强大,Tortoise ORM 的使用方式简单直观,适合用于快速开发异步数据库操作。
- 自动化生成表结构:Tortoise ORM 能够根据模型类自动生成数据库表结构。
- 兼容性:Tortoise ORM 与 Python 异步框架和工具(如
asyncpg
、aiohttp
、FastAPI
)无缝集成。
安装:
pip install tortoise-orm
使用示例:
以下是使用 Tortoise ORM 进行数据库操作的基础示例。
1. 定义数据库模型:
Tortoise ORM 使用模型类来定义数据库表。模型类需要继承自 tortoise.models.Model
,并且字段需要使用 Tortoise 提供的类型(例如:CharField
, IntField
, FloatField
, DatetimeField
等)。
from tortoise import fields
from tortoise.models import Model
class User(Model):
id = fields.IntField(pk=True) # 主键
name = fields.CharField(max_length=100) # 字符字段
email = fields.CharField(max_length=255) # 字符字段
created_at = fields.DatetimeField(auto_now_add=True) # 自动填充时间
class Meta:
table = "users" # 表名
2. 初始化数据库连接:
Tortoise ORM 使用 Tortoise.init()
来初始化数据库连接,并且在执行任何数据库操作之前,需要指定数据库 URL 和模块。
from tortoise import Tortoise
# 异步初始化数据库连接
async def init():
await Tortoise.init(
db_url='sqlite://example.db', # 数据库 URL
modules={'models': ['__main__']} # 模块位置,指向定义模型的模块
)
await Tortoise.generate_schemas() # 生成数据库表
3. 异步操作数据:
Tortoise ORM 的查询是完全异步的,支持常见的 CRUD 操作(增、查、改、删)。
from tortoise import run_async
# 异步创建一个新用户
async def create_user():
user = await User.create(name="John", email="john@example.com")
print(f"User created: {user.name}")
# 异步查询用户
async def get_user_by_id(user_id):
user = await User.get(id=user_id)
print(f"User found: {user.name}")
# 异步查询所有用户
async def get_all_users():
users = await User.all()
for user in users:
print(f"User: {user.name}")
# 执行操作
async def main():
await init()
await create_user()
await get_all_users()
run_async(main())
4. 数据库迁移:
Tortoise ORM 并不内建自动化数据库迁移工具,因此在数据库结构变动时,你需要使用外部工具(如 aerich
)来进行迁移管理。
安装 aerich
:
pip install aerich
然后使用 aerich
来生成数据库迁移和同步数据库:
# 初始化迁移
aerich init -t app.models
# 创建迁移文件
aerich migrate
# 应用迁移到数据库
aerich upgrade
总结:
Tortoise ORM 是一个轻量级的、专为异步 Python 应用设计的 ORM,尤其适合与 asyncio
或 FastAPI 等异步框架结合使用。它提供了简洁而强大的功能,能够帮助开发者快速地进行数据库操作。虽然它不像 Django ORM 那样包含很多集成功能(如管理后台、表单处理等),但对于专注于异步编程的应用来说,它是一个非常好的选择。
如果你的应用程序使用异步架构并且需要一个高效、易用的数据库 ORM,Tortoise ORM 是一个不错的选择。