Что такое Tortoise ORM и в каких случаях её используют?

Ответ

Tortoise ORM — это асинхронная ORM (Object-Relational Mapper) для Python, созданная для работы с asyncio. Её синтаксис во многом вдохновлен Django ORM, что делает её интуитивно понятной для Django-разработчиков.

Основное назначение — предоставить удобный способ взаимодействия с базами данных (PostgreSQL, MySQL, SQLite) в асинхронных веб-фреймворках, таких как FastAPI, Starlette или aiohttp.

Ключевые особенности:

  • Асинхронность: Все операции с БД являются awaitable, что предотвращает блокировку event loop.
  • Декларативные модели: Структура таблиц описывается через Python-классы.
  • Система миграций: Поддерживает генерацию и применение миграций для изменения схемы БД.
  • Управление отношениями: Поддерживает связи ForeignKey, OneToOne и ManyToManyField.

Пример использования с FastAPI:

# models.py
from tortoise import fields, models

class User(models.Model):
    id = fields.IntField(pk=True)
    username = fields.CharField(max_length=50, unique=True)

    def __str__(self):
        return self.username

# main.py
from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise

app = FastAPI()

@app.post("/users/")
async def create_user(username: str):
    # Асинхронное создание объекта
    user = await User.create(username=username)
    return {"id": user.id, "username": user.username}

# Регистрация ORM в приложении FastAPI
register_tortoise(
    app,
    db_url="sqlite://:memory:",
    modules={"models": ["models"]},
    generate_schemas=True,
    add_exception_handlers=True,
)

Когда стоит выбрать Tortoise ORM?

Её выбирают для проектов, где производительность асинхронного кода является приоритетом, и нужен простой, но функциональный инструмент для работы с БД, похожий на ORM из Django.