Введение
PostgreSQL — это мощная реляционная СУБД с открытым исходным кодом, известная своей надёжностью, масштабируемостью и поддержкой сложных типов данных. Чтобы работать с ней из Python, самым популярным инструментом является Psycopg2 — официальный синхронный драйвер для PostgreSQL.
Psycopg2 – драйвер PostgreSQL предоставляет стабильное и производительное решение для подключения, выполнения SQL-запросов, управления транзакциями и интеграции с веб-фреймворками.
Установка и подключение к базе
Установка
Подключение к PostgreSQL
Создание курсора:
Создание базы данных и таблиц
CRUD-операции с Psycopg2
Добавление записи
Выборка данных
Обновление и удаление
Курсоры и работа с транзакциями
Psycopg2 по умолчанию использует транзакции. Изменения нужно коммитить вручную:
Чтение результатов запросов
-
fetchone()
— получить одну строку -
fetchmany(n)
— получитьn
строк -
fetchall()
— получить все строки
Также можно перебирать курсор напрямую:
Безопасность и защита от SQL-инъекций
Никогда не используйте f-строки или .format()
для SQL-запросов.
Работа с типами данных PostgreSQL
Psycopg2 поддерживает:
-
JSON → автоматически преобразуется в Python-словарь
-
UUID
-
Timestamp
-
Массивы (списки)
-
Decimal
Пример с JSON:
Интеграция с Pandas, Flask и Django
Pandas
Flask
Django
Django использует psycopg2 по умолчанию для PostgreSQL:
Сравнение с другими драйверами PostgreSQL
Драйвер | Асинхронность | Скорость | Поддержка ORM | Уровень управления |
---|---|---|---|---|
Psycopg2 | Нет | Высокая | SQLAlchemy, Django | Полный контроль |
asyncpg | Да | Очень высокая | Ограниченно | Асинхронный API |
aiopg | Да | Средняя | Ограниченно | Асинхронный API |
psycopg3 | Да (новая версия) | Высокая | Да | Асинхронность встроена |
Тестирование и отладка
-
Используйте отдельную тестовую базу
-
Очистка таблиц перед тестом:
-
Логируйте SQL-запросы для отладки
-
Используйте фикстуры с
pytest
илиunittest
Асинхронная альтернатива (psycopg3)
Psycopg3 — новая версия с поддержкой асинхронных API через await
:
Подходит для проектов на FastAPI и других async-фреймворках.
Работа с большими объёмами данных
Для обработки большого количества строк:
Или использовать server-side курсор:
Часто задаваемые вопросы (FAQ)
1. Что такое psycopg2?
Это синхронный драйвер для подключения и работы с PostgreSQL в Python.
2. Поддерживает ли psycopg2 транзакции?
Да, полностью. Вы можете управлять commit()
и rollback()
.
3. Как обезопасить SQL-запросы?
Используйте параметризацию: execute(sql, params)
.
4. Можно ли использовать psycopg2 с Django?
Да, это рекомендуемый драйвер PostgreSQL для Django.
5. Есть ли поддержка асинхронности?
Нет, используйте psycopg3
или asyncpg
для async-приложений.
6. Работает ли psycopg2 с Pandas?
Да, через read_sql()
и to_sql()
с SQLAlchemy.
Полный справочник по ключевым функциям и модулям библиотеки Psycopg2 для Python
Установка
Или (если нужна сборка с исходников):
Подключение к базе данных
Функция | Описание |
---|---|
psycopg2.connect(...) |
Создаёт соединение с базой данных PostgreSQL. |
Выполнение SQL-запросов
Метод | Описание |
---|---|
cursor.execute(sql, params) |
Выполняет SQL-запрос с параметрами. |
cursor.executemany(sql, list_of_params) |
Повторяет запрос для списка параметров. |
cursor.callproc(procname, args) |
Вызов хранимой процедуры. |
Получение данных
Метод | Описание |
---|---|
cursor.fetchone() |
Получает одну строку. |
cursor.fetchall() |
Получает все строки. |
cursor.fetchmany(size) |
Получает size строк. |
for row in cursor: |
Итерация по результату. |
Работа с транзакциями
Метод | Описание |
---|---|
conn.commit() |
Подтверждение транзакции. |
conn.rollback() |
Откат транзакции. |
conn.autocommit = True |
Автоматическая фиксация транзакций. |
Закрытие соединений
Метод | Описание |
---|---|
cursor.close() |
Закрывает курсор. |
conn.close() |
Закрывает соединение. |
Параметры запроса
Синтаксис | Описание |
---|---|
%s |
Стандартный плейсхолдер для значений. |
cursor.execute("SELECT * FROM users WHERE name=%s", ("Ваня",)) |
Пример безопасной подстановки. |
Использование с контекстными менеджерами
Использование словарей (DictCursor
)
Работа с типами данных
Тип PostgreSQL | Тип Python |
---|---|
INTEGER | int |
TEXT | str |
BOOLEAN | bool |
TIMESTAMP | datetime |
JSON / JSONB | dict/list |
BYTEA | bytes |
Работа с JSON
Или использовать тип psycopg2.extras.Json
:
Массовые вставки (bulk insert)
Или более эффективно:
Работа с расширениями PostgreSQL
Работа с временными таблицами
Обработка ошибок
Исключение | Описание |
---|---|
psycopg2.Error |
Базовое исключение. |
OperationalError |
Ошибка подключения или транзакции. |
ProgrammingError |
Ошибка SQL-синтаксиса. |
IntegrityError |
Нарушение ограничений (уникальность, внешний ключ). |