Питонические атаки
1.19K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Вчера вышел релиз psycopg2==2.9 — самого популярного питонячьего драйвера для СУБД PostgreSQL. Измнений не много, но они хорошие. В частности, починили старую проблему с открытием транзакций через контекст-менеджер, если соединение находится в autocommit mode. Вы знали про autocommit mode? Это чтобы не нужно было вручную завершать транзакцию через conn.commit() или conn.rollback() после каждого запроса.

А еще там теперь больше не поддерживаются Python 2.7, 3.4 и 3.5. Каждый раз радуюсь, когда очередная популярная библиотека перестаёт поддерживать Python 2.

https://www.psycopg.org/docs/news.html

#psycopg
Если работаете с Python и PostgreSQL, то точно знакомы с psycopg2. Вот уже наверное 15 лет это самый популярный драйвер для постгреса на питоне. Де-факто стандарт.

Циферка 2 в названии указывает на вторую версию. Сейчас автор библиотеки (Daniele Varrazzo) очень активно работает над следующей, третьей версией, написанной с нуля, несовместимой с предыдущей версией, зато с новыми полезными фичами и исправлениями давних решений в плане API и принципа работы.

Например, psycopg3:

* поддерживает async/await из коробки; пожалуй, учитывая позитивный опыт работы с psycopg2, я делаю ставку на этот драйвер для асинхронных приложений (aiopg и asyncpg далеко не идеальны, к сожалению);
* полностью обмазан тайп-аннотациями 🥰;
* умеет делать подготовленные выражения (prepared statements) и курсоры на стороне сервера.

Вот тут можно посмотреть презентацию новой версии от автора: https://www.youtube.com/watch?v=XH5_Hc_BHaE

А вот здесь инструкция, как можно установить и пощупать бета-версию уже сейчас: https://twitter.com/psycopg/status/1410221901323063299?s=20

#psycopg
Похоже, в отличие от меня, половина людей все-таки внимательно читает документацию (хотя я так и не нашел, где бы это было упомянуто явно), и знает, что psycopg2 делает client-side binding. Для меня это сегодня стало новостью. Я почему-то был уверен, что psycopg2 просто делегирует подстановку данных в запрос серверу БД через подготовленные выражения.

В целом, наверное, нет особой разницы, где происходит подстановка данных в запрос. Если на стороне клиента это сделано хорошо, то оно может быть точно так же безопасно, как и server-side binding. Но всё-таки остаётся какая-то вероятность, что psycopg2 вычищает/экранирует не все опасные символы из данных. Вот будет веселье-то, если вдруг такое обнаружится. А если данные попадают в уже распаршенный запрос на стороне сервера, то это уже гарантированно, что они не смогут поменять логику запроса (уже слишком поздно для этого).

psycopg третьей версии будет делать server-side binding, хотя для нас (программистов) интерфейс не поменяется.

#psycopg
Psycopg3 — новая долгожданная версия самого популярного и стабильного драйвера для PostgreSQL на питоне — зреет на наших глазах. Автор (Daniele Varrazzo) недавно выложил первый бета-релиз на настоящий PyPI. До этого были только релизы на тестовом PyPI.

https://www.psycopg.org/articles/2021/08/30/psycopg-30-beta1-released/

#psycopg
Вышел стабильный релиз psycopg==3.0. Можно пробовать внедрять в свои проекты.

pip install --upgrade pip           # to upgrade pip
pip install psycopg[binary,pool] # to install package and dependencies


🐍 + 🐘 = 🎉

https://twitter.com/psycopg/status/1447962001121157133?s=21

#psycopg
Достаточно сильные аргументы против вставки значений напрямую в SQL-запросы.

Документация psycopg снова радует. С каждой версией её становится всё интереснее читать.

#psycopg