Tortoise ORM¶
Tortoise ORM 是一款易于使用的 asyncio
ORM(对象关系映射器),灵感来自 Django。
Tortoise ORM 在构建时充分考虑了关系,并钦佩出色且流行的 Django ORM。它在设计中明确规定,您不仅处理表,还处理关系数据。
注意
Tortoise ORM 是一个年轻的项目,可能会发生重大更改。我们保留 变更日志,其中会明确记录可能的故障。
源代码和问题跟踪器可在 https://github.com/tortoise/tortoise-orm/ 获得。
Tortoise ORM 在 CPython >= 3.8 上受 SQLite、MySQL 和 PostgreSQL 支持。
简介¶
Tortoise ORM 的构建原因是什么?¶
Python 有许多现有且成熟的 ORM,但不幸的是,它们的设计与 I/O 处理方式的相反范例相悖。 asyncio
是一项相对较新的技术,它具有不同的并发模型,最大的变化在于 I/O 的处理方式。
但是,Tortoise ORM 并不是构建 asyncio
ORM 的首次尝试,有许多开发者尝试将同步 Python ORM 映射到异步世界,但最初的尝试没有一个简洁的 API。
因此,我们启动了 Tortoise ORM。
Tortoise ORM 的设计既实用又熟悉,以方便希望切换到 asyncio
的开发人员迁移。
与其他 Python ORM 相比,它的性能也很好,与 Pony ORM 互换。

ORM 有何用?¶
当你构建一个使用关系型数据库的应用程序或服务时,有时你无法只使用参数化查询或查询生成器,你只能不断重复自己,为每个实体编写略有不同的代码。代码不知道数据之间的关系,因此你最终几乎要手动连接你的数据。在访问数据库的方式上也容易出错,从而很容易受到 SQL 注入攻击。你的数据规则也是分散的,增加了管理数据的复杂性,更糟糕的是,应用不一致。
ORM(对象关系映射器)旨在通过集中你的数据模型和数据规则来解决这些问题,确保你的数据得到安全管理(提供对 SQL 注入的免疫力),并跟踪关系,这样你就不必这么做了。
功能¶
简洁、熟悉的 Python 接口¶
像这样定义你的模型
from tortoise.models import Model
from tortoise import fields
class Tournament(Model):
id = fields.IntField(primary_key=True)
name = fields.TextField()
像这样初始化你的模型和数据库
from tortoise import Tortoise, run_async
async def init():
# Here we create a SQLite DB using file "db.sqlite3"
# also specify the app name of "models"
# which contain models from "app.models"
await Tortoise.init(
db_url='sqlite://db.sqlite3',
modules={'models': ['app.models']}
)
# Generate the schema
await Tortoise.generate_schemas()
# run_async is a helper function to run simple async Tortoise scripts.
run_async(init())
像这样使用它
# Create instance by save
tournament = Tournament(name='New Tournament')
await tournament.save()
# Or by .create()
await Tournament.create(name='Another Tournament')
# Now search for a record
tour = await Tournament.filter(name__contains='Another').first()
print(tour.name)
可插拔的数据库后端¶
Tortoise ORM 目前支持以下 数据库
PostgreSQL >= 9.4(使用
asyncpg
)SQLite(使用
aiosqlite
)MySQL/MariaDB(使用 asyncmy)
Microsoft SQL Server/Oracle(使用
asyncodbc
)
更多¶
Tortoise ORM 支持以下功能
如果你想做出贡献,请查看问题,或直接创建 PR