Yeep — это легковесная ORM (Object-Relational Mapping) библиотека, созданная для упрощения взаимодействия с базой данных PostgreSQL в асинхронных Python-приложениях.
Основная цель проекта — глубокое изучение принципов работы ORM. Я хотел на практике понять, как происходит преобразование Python-объектов в SQL-запросы, как реализуются транзакции и управление сессиями на низком уровне. Проект стал практическим исследованием паттернов проектирования для работы с базами данных.
- Декларативное описание схемы: Создание и управление таблицами через Python-классы.
- Асинхронность: Построен на основе
asyncpgдля максимальной производительности. - Транзакции: Поддержка атомарных операций с помощью менеджера контекста.
- Гибкие запросы: Реализованы сложные выборки, включая
JOIN, агрегатные функции (SUM,COUNT) и фильтрацию. - Безопасность: Использование параметризованных запросов для защиты от SQL-инъекций.
- Язык: Python 3.9+
- Драйвер БД:
asyncpg
1. Определение таблицы и подключение к БД
from yeep import PostgresDB, Table, Column, ColumnType
# Подключение к базе данных
db = PostgresDB(
database="your_db", user="your_user", password="your_password"
)
# Определение схемы таблицы
users_schema = [
Column("id", ColumnType.SERIAL, primary_key=True),
Column("name", ColumnType.VARCHAR, length=100, nullable=False),
Column("email", ColumnType.VARCHAR, length=100, unique=True)
]
# Инициализация объекта таблицы
users = Table(db, "users", users_schema)2. Операции с данными
async def main():
async with db:
# Вставка одной записи
await users.insert({
"name": "Иван Иванов",
"email": "ivan@example.com"
})
# Поиск записи
user = await users.find_one({"email": "ivan@example.com"})
print(user)
# Обновление данных
await users.update(
{"name": "Иван Петров"},
{"email": "ivan@example.com"}
)