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 互换。

_images/ORM_Perf.png

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 支持以下功能

  • 设计为用于现有项目
    • 测试框架使用现有的 Python 单元测试框架,只需要调用 initializer()finalizer() 来设置和销毁测试数据库。(请参阅 单元测试支持

    • ORM 初始化应用程序 完全从提供的参数配置

  • 可组合的、受 Django 启发的 模型

  • 支持关系,例如 ForeignKeyFieldManyToManyField

  • 支持许多标准 字段

  • 全面的 查询 API

  • 事务 事务

  • PyLint 插件

如果你想做出贡献,请查看问题,或直接创建 PR