PYTHONOMANIA
273 subscribers
195 photos
3 videos
1 file
616 links
Откройте для себя мир Python в PYTHONOMANIA!

Идеально подходит как для начинающих, так и для опытных разработчиков. Присоединяйтесь к нам, чтобы достичь совершенства в Python!

Сайт: https://pythonomania.github.io/
Download Telegram
📱Plain.

Plain — веб-фреймворк на Python, созданный для продуктовых команд: минимализм, читаемость, гибкость.

🔹Из коробки:

🔘URL → View.
🔘HTTP-обработка.
🔘Jinja-шаблоны.
🔘Формы и CLI.
🔘Middleware.
🔘Работа со static.
🔘Интеграции с пакетами Plain и сторонними библиотеками.
🔘Preflight-проверки.

#Python #WebFramework #PlainFramework #HTMX #TailwindCSS #MinimalPython #FullStackPython #WebDev #Backend #Frontend #OpenSource #ORM #Middleware #Jinja2 #Pytest #OAuth #ProductivityTools #PythonWebDev

📱Ссылка на репозиторий:
https://github.com/dropseed/plain
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍2🔥2
📱Onlymaps.

Onlymaps
— лёгкая Python-библиотека (micro-ORM) для работы с базой данных через обычные SQL-запросы.

❓Что делает:

🔘Позволяет писать чистый SQL, при этом автоматически мапит результаты в Python-объекты.

🔘Поддержка синхронного и асинхронного выполнения запросов.

🔘Типизация и валидация через Pydantic.

🔘Работает с PostgreSQL, MySQL, MariaDB, MS SQL Server и SQLite.

🔘Поддержка connection pooling для многопоточных приложений.

🔘Удобные обёртки для JSON и bulk-запросов.

🔘Простое управление транзакциями через контекстный менеджер.

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

from onlymaps import connect
from pydantic import BaseModel

class User(BaseModel):
name: str
age: int

with connect("postgresql://user:pass@localhost:5432/mydb") as db:
users: list[User] = db.fetch_many(User, "SELECT name, age FROM users")


🔹Особенности:

🔘Можно использовать как обычные типы Python (tuple, dict) или модели Pydantic для маппинга.

🔘Контейнеры (tuple, list, set) для данных без имён колонок.

🔘Модели (dict, dataclass, BaseModel) для сохранения структуры и валидации.

🔘Полная поддержка транзакций и безопасное выполнение bulk-запросов.

#Python #ORM #SQL #Pydantic #PostgreSQL #MySQL #SQLite #AsyncPython #MicroORM #DatabaseTools

📱Ссылка на репозиторий:
https://github.com/manoss96/onlymaps
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥4👍2
📱Embar.

Embar — это новый ORM для Python с сильной типизацией и SQL‑образным синтаксисом, вдохновлённый Drizzle и рассчитанный на Python 3.14 и выше.

❓Что такое Embar:

Embar ставит целью сделать работу с БД в Python максимально типобезопасной: ваш type checker знает валидные аргументы и точные типы результатов, а LSP подсказывает, как собрать нужный запрос. Запросы пишутся в SQL‑подобном стиле, но при этом вы всегда можете просто использовать сырой SQL, когда нужно.

🔹Поддерживаемые БД и стек:

Сейчас Embar поддерживает три клиента: SQLite 3 через стандартную библиотеку, Postgres через psycopg3 и Postgres через async‑клиент psycopg3 (рекомендуется именно async‑вариант). Для валидации используется Pydantic, а дизайн библиотеки хорошо ложится на привычные сценарии с FastAPI.

🔻Фичи и ограничения:

Embar активно использует новые template strings (t‑строки), поэтому поддерживает только Python 3.14. Есть CLI для генерации миграций с помощью LLM и ANTHROPIC_API_KEY, но корректный diff миграций пока в разработке.

#python #orm #asyncio #postgres #sqlite #typing #pydantic #python314 #fastapi #drizzleinspired

📱Ссылка на репозиторий:
https://github.com/carderne/embar
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍2🔥1
📱Oxyde ORM.

Oxyde ORM — асинхронный type‑safe ORM с Pydantic v2 и быстрым Rust‑ядром, сделанный в духе Django ORM, но с современным API и предсказуемым поведением.

🔹Особенности Oxyde:

🔘Django‑стиль: привычный User.objects.filter(...), аннотации полей и Meta‑класс для таблиц.

🔘Pydantic‑центричность: модели — полноценные Pydantic v2, с валидацией, тайпингом и удобной сериализацией.

🔘Rust‑производительность: генерация и выполнение SQL вынесены в Rust‑core (oxyde-core), что даёт высокий ops/sec в бенчмарках против популярных ORM.

🔘Async‑first: всё на asyncio, с поддержкой PostgreSQL, SQLite и MySQL, транзакций и nested transaction.atomic().

🔘Интеграция с FastAPI: готовый db.lifespan(...) для подключения БД на уровне приложения.

🔻Установка и быстрый старт:

pip install oxyde


from oxyde import Model, Field

class User(Model):
id: int | None = Field(default=None, db_pk=True)
name: str
email: str = Field(db_unique=True)


#python #orm #asyncio #pydantic #rust #fastapi #postgresql #sqlite #mysql

📱Ссылка на репозиторий:
https://github.com/mr-fatalyst/oxyde
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡2👍22
📱Django-tasks-db.

django-tasks-db — это backend для Django Tasks (новая фича Django 6.0+), который хранит задачи в БД через ORM вместо Redis/RQ: простой worker ./manage.py db_worker.

🔹Настройка:

INSTALLED_APPS = ["django_tasks_db"]

TASKS = {
"default": {
"BACKEND": "django_tasks_db.DatabaseBackend",
"QUEUES": ["default"]
}
}


🔻Команды:

🔘Worker: manage.py db_worker --reload (DEBUG‑релоад).

🔘Cleanup: manage.py prune_db_task_results (удаляет старые задачи).

✅Идеально для простых проектов без внешних очередей, с приоритетами и `run_after`.

#django #tasks #background #orm #djangotasksdb

📱Ссылка на репозиторий:
https://github.com/RealOrangeOne/django-tasks-db
Please open Telegram to view this post
VIEW IN TELEGRAM
1⚡4👍1
📱Tortoise ORM.

Tortoise
ORM - это простая и производительная асинхронная ORM (Object-Relational Mapper) для Python 3.10+, созданная под сильным вдохновением от Django ORM.

Библиотека разработана специально для asyncio и сочетает привычный, выразительный синтаксис моделей Django с нативной асинхронностью, избавляя от бойлерплейта и необходимости писать «сырые» SQL-запросы в асинхронных микросервисах.

🔹Ключевые возможности:

🔘Нативная асинхронность: Спроектирована с нуля для работы с современным асинхронным стеком Python (async/await) без блокировки event loop.

🔘Django-подобный API: Привычное объявление моделей через классы Model, строгая типизация полей (fields), поддержка связей ForeignKeyField / ManyToManyField и удобный QuerySet (filter, annotate, prefetch_related).

🔘Широкая поддержка баз данных:

✔️PostgreSQL (asyncpg, psycopg)

✔️MySQL / MariaDB (asyncmy, aiomysql)

✔️SQLite (aiosqlite)

✔️MS SQL & Oracle (asyncodbc)

🔘Встроенные миграции: Поставляется с готовым CLI-инструментом (tortoise makemigrations, tortoise migrate, tortoise sqlmigrate) для автоматического отслеживания изменений схем и генерации миграций.

🔘Бесшовная интеграция: Идеально подходит для связки с FastAPI, Sanic, Litestar, Quart и другими современными веб-фреймворками.

💻Быстрый старт:

1. Определение моделей:
from tortoise import fields
from tortoise.models import Model

class Tournament(Model):
id = fields.IntField(primary_key=True)
name = fields.CharField(max_length=50)

class Event(Model):
id = fields.BigIntField(primary_key=True)
name = fields.TextField()
tournament = fields.ForeignKeyField('models.Tournament', related_name='events')


2. Инициализация и работа с данными:

import asyncio
from tortoise import Tortoise

async def main():
# Подключение к БД
await Tortoise.init(
db_url='sqlite://db.sqlite3',
modules={'models': ['__main__']}
)
# Генерация таблиц (для dev-режима)
await Tortoise.generate_schemas()

# Создание записей
tournament = await Tournament.create(name='Cyber Cup 2026')
await Event.create(name='Final Match', tournament=tournament)

# Выборка с подгрузкой связанных связей
events = await Event.filter(tournament=tournament).prefetch_related('tournament')
for event in events:
print(f"Событие: {event.name}, Турнир: {event.tournament.name}")

await Tortoise.close_connections()

asyncio.run(main())


📦Установка:
# Базовая версия (SQLite):
pip install tortoise-orm

# С драйвером для PostgreSQL:
pip install "tortoise-orm[asyncpg]"

# С драйвером для MySQL:
pip install "tortoise-orm[asyncmy]"


✅Проект распространяется под открытой лицензией Apache 2.0.

#Python #TortoiseORM #ORM #AsyncIO #FastAPI #PostgreSQL #MySQL #Database #Backend #DevTools #OpenSource

📱Ссылка на репозиторий:
https://github.com/tortoise/tortoise-orm
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥11