Python for Devs
1.17K subscribers
50 photos
19 videos
68 links
По сотрудничеству пишите в личные сообщения канала.
Download Telegram
😳 Как мы освободили 20 ГБ в PostgreSQL без удаления данных

Команда Python for Devs подготовила перевод статьи о том, как можно освободить десятки гигабайт места в PostgreSQL без удаления данных и индексов.

TL;DR: удаляем неиспользуемые индексы, чистим bloat, пересобираем таблицы и используем частичные индексы, чтобы хранить только то, что реально нужно.

📚 Подробности на Хабр: https://habr.com/ru/articles/944704/
👍42🔥2
🔥 Нововведение, которое изменило Python

В 2018 году Python получил оператор присваивания в выражениях :=, известный как walrus operator. Он появился благодаря PEP 572 и стал одной из самых обсуждаемых фич за всю историю языка.

Что это такое?
Оператор позволяет присвоить значение переменной прямо внутри выражения:


if (n := len(data)) > 10:
print(f"Слишком длинный список: {n} элементов")


Зачем?
Это упрощает код, избавляя от дублирования. До := приходилось дважды писать одно и то же выражение: сначала вычислять его, потом использовать.


n = len(data)
if n > 10:
print(f"Слишком длинный список: {n} элементов")


⚠️ Почему сообщество было против?

* Новый синтаксис казался слишком «магическим» и непривычным.
* Опасения, что Python потеряет читаемость и станет «вторым Perl».
* Многие считали, что выгода слишком мала, чтобы ломать стиль кода.

Финальное решение

Несмотря на жаркие споры, Гвидо ван Россум лично принял решение в пользу PEP 572. Но цена оказалась высокой: давление и негатив вокруг этой дискуссии подтолкнули его уйти с поста BDFL (Benevolent Dictator For Life).

К чему это привело?

* Python получил «walrus» начиная с версии 3.8.
* Управление языком изменилось навсегда: вместо одного лидера теперь решения принимает Steering Council, избираемый core-разработчиками.
* Этот кризис стал поворотной точкой: Python перешёл к более демократичной модели развития.

🐍 Оператор := изменил не только синтаксис, но и саму систему управления Python.

А вы используете walrus в своём коде или до сих пор относитесь к нему с недоверием?
👍73🔥2
🤷 Какой Python-фреймворк выбрать: Django, Flask или FastAPI?

Команда Python for Devs подготовила перевод статьи о том, какой фреймворк выбрать для веб-разработки на Python: Django, Flask или FastAPI.

Django берёт надёжностью и готовой функциональностью, Flask — гибкостью и минимализмом, FastAPI — скоростью и современными возможностями.

📚 Подробности на Хабр: https://habr.com/ru/articles/944708/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥32
Какой Python-фреймворк вы предпочитаете для веб-разработки?
Anonymous Poll
39%
Django
8%
Flask
41%
FastAPI
13%
Другой
🫡 Еженедельный дайджест №2

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Статьи:
Zen of Python: философия языка
Как победить циклические импорты в Python простым способом
Неудачные эксперименты с Vibe Coding на Python
Как мы освободили 20 ГБ в PostgreSQL без удаления данных
Какой Python-фреймворк выбрать: Django, Flask или FastAPI?

Посты-коротыши:
Пасхалка в Python: антигравитация
PEP 750: t-строки — новый уровень форматирования в Python!
PythonHero 👑 Великодушный пожизненный диктатор
Нововведение, которое изменило Python

Опросы:
Какой Python-фреймворк вы предпочитаете для веб-разработки?

Самый популярный комментарий этой недели – комментарий к статье "Как мы освободили 20 ГБ в PostgreSQL без удаления данных" от пользователя @Azrak:

"...как можно освободить десятки гигабайт места в PostgreSQL без удаления данных и индексов ... удаляем неиспользуемые индексы" 🙂


@python_for_devs
👍4🔥32
Меньше магии, больше кода: мой способ писать Django views

Команда Python for Devs подготовила перевод статьи о том, как автор выбирает способ написания представлений в Django.

Он считает, что обобщённые классовые представления (CBV) скрывают слишком много магии, усложняют чтение кода и отладку. Вместо них он использует базовый View, чтобы сохранять контроль, но при этом избегать громоздких if в функциях.

А вы как пишете свои представления — на функциях, CBV или тоже предпочитаете «чистый» View?

📚 Подробности на Хабр: https://habr.com/ru/articles/946734/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥1
🔧 Целостность данных JSON-колонок в PostgreSQL

JSON всё чаще используют в реляционных базах данных — он позволяет хранить гибкие структуры и избавляет от избыточных связей между таблицами. Но вместе с удобством появляется риск: данные могут потерять предсказуемость.

Если не контролировать содержимое JSON-колонок, туда легко попадут неожиданные значения: числа вместо строк, объекты вместо массивов. В итоге приложение может «сломаться» на ровном месте.

В MySQL проверка JSON поддерживается из коробки. В PostgreSQL для этого есть расширение, которое позволяет валидировать данные по JSON-схеме прямо на уровне БД.

Пример: у нас есть таблица products с колонкой attributes, где хранятся характеристики товара.


CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
attributes JSON NOT NULL DEFAULT '{}'
);


Мы ожидаем, что поле tags внутри этого JSON будет массивом строк. Однако без строгой проверки на уровне базы данных нет гарантии, что кто-то не запишет туда числа, объекты или вообще что-то неподходящее.

Чтобы сохранить гибкость JSON и одновременно обеспечить строгую структуру данных, можно использовать валидацию JSON-схемы на уровне базы данных. Для этого нужно добавить constraint, который автоматически проверит соответствие содержимого JSON определенной схеме при каждой операции вставки или обновления.

Пример для PostgreSQL:


ALTER TABLE products ADD CONSTRAINT data_is_valid CHECK(
validate_json_schema(
'{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" }
}
},
"additionalProperties": false
}',
attributes
)
);


Теперь, попытка вставить данные с невалидным значение для tags приведёт к ошибке:


INSERT INTO products (..., attributes) VALUES
(..., '{}'), -- Пустой объект, допускается
(..., '{"tags": []}'), -- Пустой массив строк
(..., '{"tags": ["test"]}'); -- Массив со строкой
-- Результат: Операция успешна

INSERT INTO products (..., attributes) VALUES
(..., '{"tags": [2]}'); -- Массив с числом вместо строки
-- Ошибка: Нарушен constraint
👍6🔥52
🔝 Топ-6 Python-библиотек для визуализации

Matplotlib, seaborn, Plotly, Altair, Pygal и Bokeh — у каждой свои сильные и слабые стороны: от академических статичных графиков до интерактивных дашбордов для бизнеса.

Выбираем самую подходящую для различных кейсов.

📚 Подробности на Хабр: https://habr.com/ru/articles/946750/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥32
🏆 Python разрывает конкурентов — 26% рейтинга!

Python уверенно №1 в TIOBE Index с огромным отрывом: 25.98% (+5.81% за год). Это почти втрое больше, чем у ближайшего конкурента C++ (8.8%).

Интересно, что ещё в 2010 Python был на 7-м месте, а в 2000 — аж на 23-м. Сегодня это де-факто язык №1 для науки о данных, автоматизации, AI и обучения программированию.

За счёт простого синтаксиса и тонны библиотек Python остаётся идеальным входом в программирование — от скриптов до ML-моделей.

Источник.

#news@python_for_devs
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩4👍3🔥21
🫡 Django Templates: всё, что вам нужно знать

Команда Python for Devs подготовила перевод большого туторила по Django Templates.

В статье подробно разбирается, как устроен язык шаблонов Django, чем он отличается от Jinja, как правильно наследовать шаблоны и организовать структуру проекта.

Если вы хотите сделать свои Django-приложения более чистыми, поддерживаемыми и быстрыми — этот материал для вас.

📚 Подробности на Хабр: https://habr.com/ru/articles/946762/
3👍3🔥2
🫡 Еженедельный дайджест №3

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Меньше магии, больше кода: мой способ писать Django views
Целостность данных JSON-колонок в PostgreSQL
Топ-6 Python-библиотек для визуализации
Python разрывает конкурентов — 26% рейтинга!
Django Templates: всё, что вам нужно знать

Самый популярный комментарий этой недели – комментарий к статье "Меньше магии, больше кода: мой способ писать Django views" от пользователя @danilovmy:

Забавная статья. Автор не хочет запоминать другие «магические» методы и по-прежнему использует магию, такую как get_object_or_404, redirect или что-то еще...


@python_for_devs
4👍3🔥3
😲 Нововведения Python 3.14: автодополнение и подсветка синтаксиса в REPL

В новой статье узнайте про одно из нововведений Python 3.14, которое упрощает работу с Python за пределами IDE.

Теперь автодополнение и подсветка синтаксиса работают прямо в терминале, а цветовую тему можно настроить под себя.

📚 Подробности на Хабр: https://habr.com/ru/articles/948852/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍21🤩1
🧩 PEP 804: как связать внешние зависимости с вашим пакетным миром

Если вы собираете Python-пакет с нативными расширениями или завязками на системные библиотеки (zlib, OpenBLAS, компиляторы, ImageMagick и т. п.), вы точно сталкивались с болью: «pip ругнулся, а что именно надо установить — непонятно».

PEP 804 закрывает эту дыру: теперь инструменты понимают внешние зависимости из вашего pyproject.toml (в формате DepURL из PEP 725) и умеют карточно их с пакетами целевой экосистемы (Ubuntu, Fedora, Homebrew, conda-forge, Nix, Spack и т. д.). В идеале — даже показывать готовую команду установки.

Сценарий: вы ставите пакет, он не собирается из-за отсутствия g++ и zlib. Вместо «гугли сам» вы видите аккуратный список для вашей системы: sudo apt install g++ zlib1g zlib1g-dev. А если вы предпочитаете conda — получите mamba install cxx-compiler zlib.

Когда внешние зависимости не формализованы, ломается все подряд:
🟣 Сборка падает: у разных дистрибутивов разные имена одних и тех же пакетов (zlib1g-dev, zlib-devel, libz), а инструкции в README устаревают быстрее, чем хотелось бы.
🟣 Документация зарастает мхом: сложно поддерживать в актуальном состоянии команды для 5–10 экосистем одновременно.
🟣 CI/релизы с задержками: «оно у меня работало» превращается в рулетку — особенно с чужим Docker-образом, или отличной от вашей OS.
🟣 Анализ зависимостей страдает: внешние требования не видны инструментам, отчего ломаются деревья зависимостей и предсказуемость обновлений.

PEP 804 нацелен искоренить эти проблемы. Вместо «надеемся, что пользователь догадается» — центральный реестр имен + прозрачные сопоставления для конкретных экосистем, поддерживаемые самими экосистемами.

Ниже — минимальный, но рабочий «скелет», который можно взять и внедрить сегодня.

Шаг 1. Опишите внешние зависимости в pyproject.toml

Раздел [external] — это ваш чек-лист для системных/не-PyPI зависимостей. Идентификаторы — это DepURL из PEP 725: dep:generic/... для конкретных библиотек и dep:virtual/... для «ролей» (например, компилятор C++).


[build-system]
build-backend = "mesonpy"
requires = ["meson-python>=0.13.1", "pybind11>=2.10.4"]

[external]
# Что нужно для сборки (toolchain, заголовки)
build-requires = [
"dep:virtual/compiler/cxx",
]

# Что нужно для линковки/исполнения
host-requires = [
"dep:generic/zlib",
]


Что это дает: любой инструмент, понимающий PEP 804/725, может на входе получить DepURL и на выходе — список пакетов для вашей ОС/менеджера пакетов.

Шаг 2. Валидируйте DepURL-ы локально

Подтяните тул, который умеет читать [external], валидировать записи и предлагать каноничные идентификаторы. Пример с условным pyproject-external:

python -m pyproject_external show --validate .

Если вы промахнулись (написали dep:virtual/compiler/cpp вместо cxx), получите подсказку вида:

Did you mean 'dep:virtual/compiler/cxx'?

Шаг 3. Получайте команды установки для вашей платформы

То, ради чего все затевалось. Покажите маппинг под «авто-определенную» экосистему (например, Ubuntu + apt) или явно выберите нужную (conda-forge + mamba/pixi):


# Показать внешние зависимости как DepURL
python -m pyproject_external show .

# Показать уже сопоставленные имена пакетов
python -m pyproject_external show --output=mapped .

# Сгенерировать команду установки
python -m pyproject_external show --output=command .
# Пример вывода:
# sudo apt install --yes g++ zlib1g zlib1g-dev python3


Подробнее: PEP 804 — An external dependency registry and name mapping mechanism: peps.python.org/pep-0804/.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍32
⚡️ Самый быстрый способ загрузить 32 000 строк в PostgreSQL с помощью Python

Команда Python for Devs подготовила перевод статьи о том, как найти самый быстрый способ загрузки данных в PostgreSQL с помощью Python.

Автор пошагово сравнил разные методы — от построчных вставок до COPY с потоковой генерацией CSV — и показал, как ускорить процесс более чем в 250 раз при нулевом потреблении памяти.

📚 Подробности на Хабр: https://habr.com/ru/articles/948854/
👍63🔥3