Ответ
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.