Zen of Python
18.8K subscribers
1.47K photos
202 videos
38 files
3.67K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Что проверить перед переходом на SQLAlchemy 2.1

Обновление зависимости может поменять драйвер подключения, даже если строка подключения осталась прежней.

В SQLAlchemy 2.1 адрес postgresql:// по умолчанию выбирает psycopg, а oracle:// — oracledb. Если проект рассчитывает на конкретный DBAPI, укажите его явно и проверьте совместимость.

Есть ещё два изменения: минимальная версия Python — 3.11, а greenlet больше не устанавливается автоматически. Для асинхронных возможностей используйте:

pip install "sqlalchemy[asyncio]"


Перед обновлением прогоните сценарии подключения, транзакций и загрузки связей. Проверьте окружение CI: старая установленная зависимость может скрыть то, что сломается при чистой установке.

#python #sqlalchemy
Как сделать бэкап работающей SQLite через Python

Просто скопировать файл активной базы рискованно. Во время копирования страницы могут изменяться, а при WAL часть данных находится в отдельном журнале.

Python предоставляет доступ к SQLite Online Backup API через Connection.backup(). Метод вызывают у источника и передают ему соединение с приёмником:

import sqlite3
from contextlib import closing

with closing(sqlite3.connect("app.db")) as src:
with closing(sqlite3.connect("backup.db")) as dst:
src.backup(dst)


SQLite согласует копирование с работой базы. Получившаяся копия самостоятельна: следующие записи в исходник в неё не попадут.

Здесь closing нужен для закрытия соединений: обычный with connection управляет транзакцией, но не закрывает соединение. После бэкапа проверьте восстановление и чтение данных.

#python #sqlite
❤1
UTF-8 по умолчанию не перекодирует старые файлы

В Python 3.15 текстовый ввод-вывод по умолчанию использует UTF-8. Это убирает часть различий между платформами, но файл в CP1251 остаётся файлом в CP1251.

В руководстве по переходу предлагают сначала найти операции с неявной кодировкой:

python -X warn_default_encoding app.py


Предупреждения покажут выполненные вызовы, где кодировка не указана. Для остальных путей пригодится статическая проверка.

Указывайте encoding="utf-8" для UTF-8 и encoding="cp1251" для известных старых файлов. Если нужна именно кодировка локали пользователя, используйте encoding="locale".

Не добавляйте errors="ignore" ради исчезновения ошибки: так можно незаметно потерять символы. Перед обновлением проверьте реальные входные файлы, включая выгрузки из старых систем.

#python #файлы