Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Tortoise ORM
Tortoise ORM — это асинхронная ORM (Object-Relational Mapping) для Python, предназначенная для работы с базами данных в асинхронных приложениях. Она особенно популярна в экосистеме асинхронных фреймворков, таких как FastAPI, Starlette и Quart.
Основные особенности Tortoise ORM
Асинхронность — полная поддержка async/await:
- Все операции с БД выполняются асинхронно
- Не блокирует event loop
- Идеальна для высоконагруженных приложений
Поддержка нескольких БД:
- PostgreSQL
- MySQL/MariaDB
- SQLite
- Oracle (экспериментальная поддержка)
Инструменты разработки:
- Миграции (Aerich)
- Админ-панель
- Автоматическая генерация документации
Установка и первоначальная настройка
# Установка
# pip install tortoise-orm
# pip install aerich # для миграций
from tortoise import Tortoise, fields
from tortoise.models import Model
# Инициализация
async def init():
await Tortoise.init(
db_url='sqlite://:memory:',
modules={'models': ['myapp.models']}
)
await Tortoise.generate_schemas()
Определение моделей
from tortoise import fields
from tortoise.models import Model
class User(Model):
id = fields.IntField(pk=True)
username = fields.CharField(max_length=100, unique=True)
email = fields.CharField(max_length=255)
is_active = fields.BooleanField(default=True)
created_at = fields.DatetimeField(auto_now_add=True)
# Meta информация
class Meta:
table = "users"
def __str__(self):
return self.username
Связи между моделями
class Category(Model):
id = fields.IntField(pk=True)
name = fields.CharField(max_length=100)
class Product(Model):
id = fields.IntField(pk=True)
name = fields.CharField(max_length=255)
# Foreign Key
category = fields.ForeignKeyField('models.Category', related_name='products')
# Many-to-Many
tags = fields.ManyToManyField('models.Tag', related_name='products')
class Tag(Model):
id = fields.IntField(pk=True)
name = fields.CharField(max_length=50)
CRUD операции с async/await
# Create
user = await User.create(username='john', email='john@example.com')
# Read
user = await User.get(id=1)
all_users = await User.all()
active_users = await User.filter(is_active=True)
# Update
user.email = 'newemail@example.com'
await user.save()
# Delete
await user.delete()
await User.filter(is_active=False).delete()
Запросы с фильтрацией
# Простая фильтрация
users = await User.filter(is_active=True)
# Сложные фильтры
from tortoise.expressions import Q
users = await User.filter(
Q(username__startswith='john') | Q(email__contains='gmail')
).all()
# Сортировка
users = await User.all().order_by('-created_at')
# Лимит и offset
first_10 = await User.all()[:10]
page_2 = await User.all()[10:20]
Сравнение с другими ORM
vs SQLAlchemy:
- Tortoise ORM проще в использовании
- SQLAlchemy имеет большше функционала
- SQLAlchemy имеет дополнительную async поддержку (SQLAlchemy 1.4+)
- Tortoise ORM легче для микросервисов
vs Django ORM:
- Django ORM синхронная, Tortoise асинхронная
- Tortoise ORM работает вне Django
- Django ORM может использоваться с FastAPI через асинхронные функции
Миграции с Aerich
# Инициализация
aerich init -t models.TORTOISE_ORM
# Создание миграции
aerech migrate
# Применение миграций
aerech upgrade
Преимущества Tortoise ORM
- Асинхронность — полная поддержка async/await
- Простота — интуитивный API
- Скорость — не блокирует event loop
- Гибкость — поддержка различных БД
- Актуальность — активная разработка
Когда использовать
- Асинхронные веб-приложения (FastAPI, Quart)
- Микросервисы
- Высоконагруженные системы
- Real-time приложения