25 лет на ORM, теперь — raw queries + dataclasses. И вот почему
Майкл Кеннеди (автор Talk Python to Me) отказался от ORM/ODM в пользу паттерна Raw+DC: сырые запросы к базе + Python dataclasses на границе слоя доступа к данным.
🔘Главный аргумент: ИИ-ассистенты пишут нативные запросы в разы лучше, чем ORM-код. У PyMongo в 53 раза больше загрузок, чем у Beanie, и нативный синтаксис MongoDB одинаковый в Node, PHP, Go. Разница в обучающих данных огромна.
🔘Паттерн простой: raw query → dict → from_doc() → dataclass. Type safety, автокомплит в IDE, поддержка mypy — всё на месте. Без магии ORM, без зависимости от фреймворка.
🔘В комментах согласны с ИИ-аргументом, но напоминают: ORM — это не только запросы, но и миграции, валидация, защита от SQL-инъекций. Raw SQL повышает порог ответственности за безопасность.
📎 Тред на r/Python
А вы как обычно кодите?
@zen_of_python, теперь и в Max
Майкл Кеннеди (автор Talk Python to Me) отказался от ORM/ODM в пользу паттерна Raw+DC: сырые запросы к базе + Python dataclasses на границе слоя доступа к данным.
🔘Главный аргумент: ИИ-ассистенты пишут нативные запросы в разы лучше, чем ORM-код. У PyMongo в 53 раза больше загрузок, чем у Beanie, и нативный синтаксис MongoDB одинаковый в Node, PHP, Go. Разница в обучающих данных огромна.
🔘Паттерн простой: raw query → dict → from_doc() → dataclass. Type safety, автокомплит в IDE, поддержка mypy — всё на месте. Без магии ORM, без зависимости от фреймворка.
🔘В комментах согласны с ИИ-аргументом, но напоминают: ORM — это не только запросы, но и миграции, валидация, защита от SQL-инъекций. Raw SQL повышает порог ответственности за безопасность.
📎 Тред на r/Python
А вы как обычно кодите?
@zen_of_python, теперь и в Max
❤10🌚1
Вот ещё новость прошедшей недели: PyTorch перевёл тайпчекинг основного репозитория с MyPy на Pyrefly. Проверка всего проекта: MyPy — 50,6 сек, Pyrefly — 5,5 сек.
Вроде здорово, молодцы, но ведь есть ty. Ещё и пост в блоге написали, как будто одна известная большая корпорация повлияла.
А вы чем в 2026 тайп-чекаете?
(Да, как вы поняли, очень хочется пообщаться с вами, дайте каких-то комментариев, пожалуйста.)
Вроде здорово, молодцы, но ведь есть ty. Ещё и пост в блоге написали, как будто одна известная большая корпорация повлияла.
А вы чем в 2026 тайп-чекаете?
(Да, как вы поняли, очень хочется пообщаться с вами, дайте каких-то комментариев, пожалуйста.)
❤4
Анализ датасета QUT-DV25 (14 000 семплов малвари из PyPI) показал, что больше половины пакетов запускают reverse shell или крадут env-переменные прямо в
Проблема: sdist-пакеты требуют выполнения
Есть такой инструмент KEIP — eBPF-тул на LSM-хуках, который ставит сетевой whitelist на время
Вообще, в 2026
@zen_of_python
setup.py т.е. достаточно pip install, даже без импорта.
Проблема: sdist-пакеты требуют выполнения
setup.py при сборке. Это обычный Python-скрипт, он может делать что угодно — от сборки C-расширения до отправки ~/.ssh/id_rsa на C2-сервер.Есть такой инструмент KEIP — eBPF-тул на LSM-хуках, который ставит сетевой whitelist на время
pip install. Если setup.py или дочерний процесс лезет на сервер не из белого списка — весь процесс убиваетсяВообще, в 2026
setup.py — это красный флаг. Если пакет без pyproject.toml и без wheel, то может он и не нужен вам?@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
✍4❤3
МФТИ запускает онлайн-школу «Предпринимательское планирование»
Преподаватели с кафедры Технологического предпринимательства, а окончание школы даёт поступление в магистратуру на эту кафедру без экзаменов.
В школе основы и работа мини-группах: разработка бизнес-модели, фокус на рынке, стратегия роста. А в магистратуре приоритет на запуске бизнеса, в том числе работа с реальными успешными предпринимателями.
@zen_of_python, также в Max
Преподаватели с кафедры Технологического предпринимательства, а окончание школы даёт поступление в магистратуру на эту кафедру без экзаменов.
В школе основы и работа мини-группах: разработка бизнес-модели, фокус на рынке, стратегия роста. А в магистратуре приоритет на запуске бизнеса, в том числе работа с реальными успешными предпринимателями.
@zen_of_python, также в Max
❤2🤣2👍1
Как вам формат TOON (Token-Oriented Object Notation) вместо JSON?
Массивы объектов объявляются один раз в заголовке
Для Python уже есть готовые библиотеки, например
С другой стороны это просто CSV с дополнением, вложенности не очень удобно делать. Что думаете?
@zen_of_python, также в Max
Массивы объектов объявляются один раз в заголовке
users[2]{id,name,role}:, а дальше идут только данные через запятую без лишних скобок и ключей. Это сокращает объём данных на 30–60%.Для Python уже есть готовые библиотеки, например
python-toon и toons. Для промтов в ИИ экономия токенов. Для людей на глаз вроде тоже проще читается. С другой стороны это просто CSV с дополнением, вложенности не очень удобно делать. Что думаете?
@zen_of_python, также в Max
👍9❤3👎3
Вышел Starlette 1.0.0rc1, первый релиз-кандидат после 8 лет разработки
Напомню, Starlette — легковесный ASGI-фреймворк для Python. Поддерживает WebSocket, HTTP/2, фоновые задачи, middleware и маршрутизацию. На нём построен FastAPI, Starlette отвечает за всю сетевую часть, а FastAPI добавляет сверху валидацию через Pydantic и автогенерацию OpenAPI-схемы.
Том Кристи создал Starlette в июне 2018, а сейчас Марсело Трилесинский (Kludex) выпустил первый RC версии 1.0. Почти 10 млн скачиваний в день, а с недавних пор ещё и зависимость Python MCP SDK.
Что в релизе. Удаление deprecated-фич, помеченных для удаления в 1.0.0, плюс финальные баг-фиксы. Никаких крупных новых API, акцент на стабильности.
Реакция сообщества. «Starlette работала настолько стабильно, что казалось, будто 1.0 уже давно вышла». Несколько человек отметили, что узнали о Starlette как о зависимости, только когда начали копаться в MCP-серверах.
Установка:
@zen_of_python, также в Max
Напомню, Starlette — легковесный ASGI-фреймворк для Python. Поддерживает WebSocket, HTTP/2, фоновые задачи, middleware и маршрутизацию. На нём построен FastAPI, Starlette отвечает за всю сетевую часть, а FastAPI добавляет сверху валидацию через Pydantic и автогенерацию OpenAPI-схемы.
Том Кристи создал Starlette в июне 2018, а сейчас Марсело Трилесинский (Kludex) выпустил первый RC версии 1.0. Почти 10 млн скачиваний в день, а с недавних пор ещё и зависимость Python MCP SDK.
Что в релизе. Удаление deprecated-фич, помеченных для удаления в 1.0.0, плюс финальные баг-фиксы. Никаких крупных новых API, акцент на стабильности.
Реакция сообщества. «Starlette работала настолько стабильно, что казалось, будто 1.0 уже давно вышла». Несколько человек отметили, что узнали о Starlette как о зависимости, только когда начали копаться в MCP-серверах.
Установка:
pip install starlette==1.0.0rc1@zen_of_python, также в Max
🔥8🎉5
PEP 747 принят. В
Раньше функции вроде
Теперь можно так:
В Python приедет с версии 3.15. Уже сейчас доступно через
@zen_of_python
Telegram | Max
typing добавится TypeForm[T] — способ аннотировать аргументы, которые принимают не значения, а сами типы: int | str, list[int], TypedDict и другие.Раньше функции вроде
trycast() или is_match() из библиотек beartype, pydantic, typeguard приходилось аннотировать через object, слишком широко, без проверки типов.Теперь можно так:
def trycast[T](typx: TypeForm[T], value: object) -> T | None: ...
def is_match[T](value: object, typx: TypeForm[T]) -> TypeGuard[T]: ...
# Или просто переменная:
int_form: TypeForm = int | None
В Python приедет с версии 3.15. Уже сейчас доступно через
typing_extensions. Экспериментальная поддержка есть в Pyright@zen_of_python
Telegram | Max
👍9❤1
Внезапное порно в Conda
История такая: один разработчик хотел посмотреть YouTube, открыл меню «Пуск» в винде, начал вбивать You и увидел подсказу YouPorn. Очень удивился, потому что он не смотрит порно (конечно, а как вы подумали).
Начал расследование. Оказалось, что файл с таким именем лежит в
Protego — Python-библиотека для парсинга файлов robots.txt. В её тестовых данных есть пример файла robots.txt с сайта YouPorn т.е. обычный тест на реальных данных из интернета. Никакого вредоносного кода, никакой атаки на supply chain, просто Windows Search проиндексировал содержимое тестовых файлов внутри пакетов Conda.
Это хороший повод напомнить: Windows Search индексирует всё подряд, включая содержимое директорий с пакетами. При разработке на винде лучше добавить такие диры в исключения. Или не разрабатывать на винде.
@zen_of_python
История такая: один разработчик хотел посмотреть YouTube, открыл меню «Пуск» в винде, начал вбивать You и увидел подсказу YouPorn. Очень удивился, потому что он не смотрит порно (конечно, а как вы подумали).
Начал расследование. Оказалось, что файл с таким именем лежит в
Anaconda3\pkgs\protego\info\test\tests\test_data
Protego — Python-библиотека для парсинга файлов robots.txt. В её тестовых данных есть пример файла robots.txt с сайта YouPorn т.е. обычный тест на реальных данных из интернета. Никакого вредоносного кода, никакой атаки на supply chain, просто Windows Search проиндексировал содержимое тестовых файлов внутри пакетов Conda.
Это хороший повод напомнить: Windows Search индексирует всё подряд, включая содержимое директорий с пакетами. При разработке на винде лучше добавить такие диры в исключения. Или не разрабатывать на винде.
@zen_of_python
🌚12😁9✍2❤2
Опубликован черновик PEP 827 (Type Manipulation). Он предлагает добавить в Python возможности из TypeScript, чтобы не дублировать код при описании моделей.
Допустим, у вас есть класс
Сейчас приходится вручную писать новый класс и дублировать поля.
С PEP 827 можно будет сгенерировать его одной строкой:
—
—
— Если тип
Вместо копипасты под каждый эндпоинт (Create, Update, Read) вы описываете одну модель и генерируете производные. И всё это работает на уровне статического анализа. Черновик нацелен на Python 3.15.
@zen_of_python (теперь и в Max)
Допустим, у вас есть класс
User для базы данных, где есть id, email, username и created_at. Вам нужен класс UserUpdate для API, где id и created_at менять нельзя, а остальные поля необязательны, можно обновить только email.Сейчас приходится вручную писать новый класс и дублировать поля.
С PEP 827 можно будет сгенерировать его одной строкой:
UserUpdate = Partial[Omit[User, "id" | "created_at"]]
—
Omit убирает лишние поля из базового класса—
Partial делает оставшиеся необязательными— Если тип
email изменится в главной модели, он автоматически обновится и в UserUpdateВместо копипасты под каждый эндпоинт (Create, Update, Read) вы описываете одну модель и генерируете производные. И всё это работает на уровне статического анализа. Черновик нацелен на Python 3.15.
@zen_of_python (теперь и в Max)
🔥9👎6
Кто вы в IT? Если не нашли свой вариант — напишите в комментах
Anonymous Poll
12%
Junior
31%
Middle
21%
Senior
9%
Тимлид в разработке
2%
Руководитель не в разработке (деврел, HR, маркетинг)
9%
В IT, но не разработчик (дизайн, аналитика, продакт, техпис)
3%
Нет профессионального интереса в IT
13%
Студент / ещё не работаю в IT
Чем занимаетесь? Можно выбрать несколько вариантов
Anonymous Poll
53%
Веб (Frontend / Backend / Fullstack)
6%
Мобилки (Android, iOS, Flutter, RN)
4%
Геймдев
21%
Аналитика / Data Science
20%
AI / ML
22%
DevOps / Инфраструктура / Облака
7%
Embedded / IoT / Desktop
8%
Кибербезопасность
15%
Тестирование / QA
Forwarded from Типичный программист
Победителями премии Тпрогер 🐀 становятся...
Здесь играет барабанная дробь и интригующая музыка... Вам нужно только выждать драматическую паузу перед объявлением победителей — в каждой номинации он один, и определяется большинством голосов. Готовы?
В номинации «Продукт года» золотая мышь достается компании:
🐀 NetVision за платформу интеллектуального мониторинга СИМ .
В номинации «Облачный продукт года» побеждает компания:
🐀 Гравитон с паком виртуализации «Гелиус»
Звание «IT-ивент года» вручается компании:
🐀 Островок! за О!Хакатон
И в категории «Дизайн года» первое место занимает компания:
🐀 AcademiaDev за интерактивную инсталляцию .
Каждый ваш лайк, голос влияли на исход премии. Давайте поддержим всех — ставьте 🏆участникам, которые хоть и не заняли призового места, но точно остались в сердечке.
И 🔥, если хотите аналогичных активностей и готовы выбирать еще!
Здесь играет барабанная дробь и интригующая музыка... Вам нужно только выждать драматическую паузу перед объявлением победителей — в каждой номинации он один, и определяется большинством голосов. Готовы?
В номинации «Продукт года» золотая мышь достается компании:
В номинации «Облачный продукт года» побеждает компания:
Звание «IT-ивент года» вручается компании:
И в категории «Дизайн года» первое место занимает компания:
Каждый ваш лайк, голос влияли на исход премии. Давайте поддержим всех — ставьте 🏆участникам, которые хоть и не заняли призового места, но точно остались в сердечке.
И 🔥, если хотите аналогичных активностей и готовы выбирать еще!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Если вы используете httpx в своих проектах, обратите внимание на изменения в репозитории. На днях мейнтейнер библиотеки полностью закрыл доступ к issues и discussions на гитхабе.
Причина блокировки оказалась не технической. Автор объяснил свое решение тем, что больше не хочет поддерживать онлайн-среду с «абсурдно искаженным гендерным представительством».
Чем это грозит на практике:
— библиотека не получала новых релизов уже больше года, новых скорее всего уже тоже не будет;
— разработчики потеряли возможность сообщать о багах и обсуждать код.
Поскольку httpx часто применяется для асинхронных запросов, на реддите уже активно обсуждают будущее проекта. Многие пользователи не понимают, как поддерживать свои продукты дальше без обратной связи от автора.
Пока непонятно, появится ли полноценный форк или сообществу придется переходить на альтернативы вроде aiohttp. Советую иметь в виду при выборе библиотеки в своих проектах.
@zen_of_python (теперь и в Max)
Причина блокировки оказалась не технической. Автор объяснил свое решение тем, что больше не хочет поддерживать онлайн-среду с «абсурдно искаженным гендерным представительством».
Чем это грозит на практике:
— библиотека не получала новых релизов уже больше года, новых скорее всего уже тоже не будет;
— разработчики потеряли возможность сообщать о багах и обсуждать код.
Поскольку httpx часто применяется для асинхронных запросов, на реддите уже активно обсуждают будущее проекта. Многие пользователи не понимают, как поддерживать свои продукты дальше без обратной связи от автора.
Пока непонятно, появится ли полноценный форк или сообществу придется переходить на альтернативы вроде aiohttp. Советую иметь в виду при выборе библиотеки в своих проектах.
@zen_of_python (теперь и в Max)
😱5🤣2❤1
Откуда вы? Если нет вашего варианта — напишите в комментах
Anonymous Poll
24%
Москва
9%
Петербург
13%
Юг России (Ростов, Краснодар, Кавказ)
8%
Поволжье (Нижний Новгород, Казань)
7%
Урал (Екатеринбург)
12%
Сибирь и Дальний Восток
12%
Беларусь / Казахстан / Узбекистан / Украина
5%
Европа / США / Канада
10%
Другое