1. Подготовка окружения: PostgreSQL, драйверы, движок и сессии SQLAlchemy
Подготовка окружения: PostgreSQL, драйверы, движок и сессии SQLAlchemy
В этой статье мы настроим рабочее окружение для Python-приложения, которое обращается к PostgreSQL через SQLAlchemy. Цель — получить воспроизводимую базовую конфигурацию: установленная база, выбранный драйвер, созданный движок (Engine), настроенная фабрика сессий и понятный жизненный цикл сессии.
Что именно мы настраиваем
Чтобы SQLAlchemy мог выполнять запросы в PostgreSQL, нужны четыре слоя:
!Общая архитектура: как запрос проходит от приложения до PostgreSQL
Установка и запуск PostgreSQL
Нам нужен работающий PostgreSQL и доступ к нему по хосту/порту с логином и паролем.
Вариант A: установка локально
Проверка наличия клиента и версии:
Вариант B: запуск через Docker
Docker удобен тем, что окружение легко повторить.
Пример запуска контейнера:
Официальный образ: Docker Hub: postgres
Создание базы и пользователя вручную (если нужно)
Если вы не создавали БД при старте Docker или при установке, можно сделать это через psql (под пользователем с правами администратора):
Python-окружение и зависимости
Рекомендуется изолировать зависимости проекта.
Создание виртуального окружения:
Активация:
Установка SQLAlchemy и драйвера.
Какой драйвер выбрать для PostgreSQL
На практике чаще всего используются:
psycopg (psycopg3) — современный драйвер, рекомендуемый для новых проектовpsycopg2 — старый, но широко распространённый драйверasyncpg — популярный драйвер для асинхронного стекаСсылки на проекты:
Установка (синхронный вариант)
Рекомендуемая связка для синхронного кода:
Если по каким-то причинам нужен psycopg2:
> Для продакшена часто предпочитают собирать psycopg2 из исходников вместо psycopg2-binary, но для обучения и локальной разработки -binary обычно удобнее.
URL подключения: как SQLAlchemy понимает, куда подключаться
Подключение задаётся строкой URL (DSN). Общий вид:
dialect+driver://username:password@host:port/databaseДля PostgreSQL с psycopg3 чаще всего будет так:
postgresql+psycopg://app:app@localhost:5432/app_dbГде:
postgresql — диалект SQLAlchemy (набор правил генерации SQL для PostgreSQL)psycopg — драйвер (DBAPI), через который реально открывается соединениеapp:app — логин и парольlocalhost:5432 — адрес сервера и портapp_db — имя базы данныхДвижок SQLAlchemy (Engine): точка входа и пул соединений
Engine — основной объект SQLAlchemy для работы с БД на низком уровне. Он:
Создание Engine (синхронно)
Ключевые параметры:
echo=True полезен на старте, чтобы видеть, что реально уходит в БДpool_pre_ping=True снижает шанс получить “битое” соединение из пулаpool_size и max_overflow помогают управлять нагрузкой и количеством одновременных соединенийБыстрая проверка подключения
Здесь важно:
engine.connect() берёт соединение из пулаtext() — безопасный способ передать текстовый SQL в Core-слойСессия SQLAlchemy (Session): единица работы и транзакции
Если Engine — это “инфраструктура”, то Session — это “рабочая область” для операций приложения.
Session в ORM-режиме отвечает за:
commit() (зафиксировать) и rollback() (отменить)Важная идея: Engine обычно один на приложение, а Session создаётся на короткое время (например, на один запрос в веб-приложении или на одну бизнес-операцию в скрипте).
!Жизненный цикл Session: где делать commit/rollback/close
Фабрика сессий: sessionmaker
SQLAlchemy рекомендует создавать фабрику сессий, привязанную к Engine.
Что значат параметры:
autocommit=False — сессия работает в транзакционном режиме; вы явно вызываете commit()autoflush=False — сессия не отправляет изменения в БД “внезапно”; вы контролируете момент flush() (это упрощает понимание на старте)expire_on_commit=False — после commit() объекты не “протухают” автоматически (часто удобно в прикладном коде)Контекстный менеджер для сессии (рекомендуемый шаблон)
Сделаем функцию, которая гарантирует commit/rollback/close.
Использование:
Почему это важно:
Где хранить строку подключения и секреты
Не храните пароль в коде. Минимальный практичный подход — переменные окружения.
Пример:
И в Python:
Если вы используете файл .env, обычно подключают библиотеку python-dotenv, но важно понимать принцип: приложение получает секреты извне, а не из репозитория.
Частые ошибки на старте и как их быстро диагностировать
postgresql+psycopg://... и установлен ли psycopg5432 доступен и контейнер/служба работаетpsql тем же пользователемИтог
Вы настроили минимально правильное окружение для работы SQLAlchemy с PostgreSQL:
psycopg)Engine как общий объект приложенияSessionLocal и безопасный шаблон работы через session_scope()В следующих материалах на этой базе мы перейдём к моделям ORM, таблицам, запросам и управлению схемой.