PostgreSQL и Django: установка, подключение и тестирование CRUD

Добавление базы данных в приложение обеспечивает целостность и безопасность данных. PostgreSQL (Postgres) — реляционная система управления базами данных с поддержкой SQL, которую стоит рассмотреть для production и development окружений.
Postgres поддерживает большинство популярных операционных систем и совместим с современными языками программирования. Он умеет работать с разными типами данных, включая JSON/JSONB, и обеспечивает транзакции и свойства ACID. Навык настройки и использования PostgreSQL ценится на рынке, поэтому знание интеграции с фреймворками вроде Django — практический плюс.
В этой статье вы научитесь устанавливать, настраивать и использовать PostgreSQL в приложении Django. Мы протестируем функциональность базы на добавлении, хранении и извлечении данных.
Предварительные требования
- Доступ к серверу Ubuntu или рабочая машина с Ubuntu. Для Windows и macOS команды могут отличаться — используйте официальные инструкции для своей ОС.
- Установленный Python 3 и pipenv (или другая виртуальная среда). Проекты Django удобнее запускать в изолированной среде.
- Права sudo для установки пакетов.
Важно: команды и файлы в примерах приведены для наглядности. Настройки конфиденциальных данных (пароли, логины) храните в безопасном месте и никогда не коммитите в публичные репозитории.
1. Установка PostgreSQL на Ubuntu
Ниже — последовательность команд для установки PostgreSQL в Ubuntu. Если вы используете другую ОС, обратитесь к официальной документации PostgreSQL.
Обновите список пакетов и зависимости:
$ sudo apt-get updateУстановите PostgreSQL и пакеты для разработки:
$ sudo apt-get install postgresql postgresql-contrib libpq-devПри запросе подтверждения нажмите Y.
Подключитесь к системной учётной записи postgres:
$ sudo -i -u postgresОпределите версию клиента psql:
postgres@nameofaccount:~$ psql --versionПример вывода:
psql (PostgreSQL) 14.5 (Ubuntu 14.5-0ubuntu0.22.04.1)Выйдите из учётной записи postgres:
postgres@nameofaccount:~$ exitВажно: версии PostgreSQL могут отличаться — используйте актуальную для вашей системы.
2. Создание базы данных
Для проекта создайте отдельную базу данных и (желательно) отдельного пользователя, под которым будет работать Django.
Подключитесь к postgres и к клиенту psql:
$ sudo -i -u postgres
$ psqlСоздайте базу данных:
postgres=# create database new_db;При успешном создании сервер вернёт CREATE DATABASE. Список баз данных можно показать командой:
postgres=# \lСоветы по структуре данных
- PostgreSQL хранит данные в таблицах. Таблица представляет модель в приложении.
- Каждая таблица имеет столбец первичного ключа (primary key) — уникальный идентификатор строки.
- По необходимости таблицы могут быть связаны через внешние ключи (foreign key).
После создания БД переходите к созданию Django-проекта и установке зависимостей для подключения.
3. Установка Django и библиотеки psycopg2
Для взаимодействия Django с PostgreSQL требуется драйвер psycopg2 или его бинарная версия psycopg2-binary. В примерах используется psycopg2 (в production часто рекомендуют psycopg2, а для быстрого локального тестирования — psycopg2-binary).
Установите Django и psycopg2 с помощью pipenv или вашего пакетного менеджера:
$ pipenv install psycopg2 DjangoЕсли при установке возникают ошибки сборки, убедитесь, что установлены пакеты разработки для Python и libpq-dev (они были указаны в разделе установки).
4. Создание проекта и приложения Django
Создайте папку для проекта и перейдите в неё:
$ mkdir Boma-watch
$ cd Boma-watchСоздайте проект Django с именем myboma (обратите внимание на точку в конце команды — она указывает, что проект создаётся в текущей директории):
$ django-admin startproject myboma .Создайте приложение boma:
$ django startapp bomaЕсли вы новый пользователь Django, рекомендуем краткий вводный туториал по официальной документации. После создания проекта можно проверять работу сервера разработки командой runserver и убедиться, что проект запускается.
5. Подключение базы данных к Django
Шаг 1. Измените настройки проекта для использования PostgreSQL
Откройте settings.py проекта и найдите секцию DATABASES. Замените значения на конфигурацию для PostgreSQL. Пример:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'new_db',
'USER': 'morine',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}Замените USER и PASSWORD на учётные данные вашей базы. Поле HOST может быть доменом или IP сервера, PORT — стандартный 5432.
Важно: не храните пароли в открытом виде в репозитории. Используйте переменные окружения или менеджер секретов.
Шаг 2. Настройте временную зону
В settings.py можно установить временную зону проекта. По умолчанию Django настроен на UTC. Пример для Набира (пример):
TIME_ZONE = 'Africa/Nairobi'Выберите временную зону, соответствующую требованиям вашего приложения.
Шаг 3. Создайте модель
В приложении boma откройте models.py и добавьте модель Profile:
from django.db import models
class Profile(models.Model):
name = models.CharField(max_length=30)
bio = models.TextField(max_length=100)
def __str__(self):
return self.nameМодель определяет структуру таблицы, которую Django создаст при миграции.
Шаг 4. Миграции
Создайте миграции для приложения и примените их к базе данных:
(virtual)$ python manage.py makemigrations boma
(virtual)$ python manage.py migrateРезультат миграции — создание таблиц в PostgreSQL на основе моделей. Пример вывода о выполненных операциях показан на рисунке:
Команда migrate автоматически читает INSTALLED_APPS и файлы models.py, чтобы создать необходимые таблицы.
6. Тестирование CRUD через Django shell
Django предоставляет удобную консоль для тестирования ORM-операций. Запустите оболочку Django:
(virtual)$ python manage.py shellСоздание (Create)
Импортируйте модель и создайте запись:
from boma.models import Profile
prof1 = Profile.objects.create(name='Ken', bio='I am a Scorpio')
prof1.save()Чтение (Read)
Получить все записи:
Profile.objects.all() # -> ]> Получить по первичному ключу:
Profile.objects.get(pk=1) # -> Обновление (Update)
Обновить по фильтру:
Profile.objects.filter(id=1).update(name='Kim') # -> 1 (число обновлённых строк)Проверить:
Profile.objects.filter(id=1) # -> ]> Удаление (Delete)
Удалить запись:
Profile.objects.filter(id=1).delete() # -> (1, {'boma.Profile': 1})Проверить отсутствие:
Profile.objects.filter(id=1) # -> Почему использовать PostgreSQL
- Расширяемость и богатый набор типов данных (включая JSONB).
- Надёжная поддержка транзакций и соответствие ACID.
- Активное сообщество и регулярные улучшения в открытом исходном коде.
- Хорошая совместимость с языками и инструментами разработки.
Postgres подходит для большинства web-приложений, где требуется надёжное реляционное хранилище и расширяемость.
Когда PostgreSQL может не подойти
- Если требуется максимально лёгкая база для тестов — можно использовать SQLite для простоты.
- Если приложение строго документно-ориентировано и ожидает огромные нереляционные нагрузки, иногда лучше рассмотреть NoSQL решения (например, MongoDB), но это зависит от требований.
- Для очень простых прототипов и локальной разработки SQLite быстрее в настройке.
Альтернативы и когда их выбрать
- SQLite — для локальной разработки и простых проектов без параллельных транзакций.
- MySQL/MariaDB — если в стеке уже используется MySQL и есть требования к совместимости или существующим инструментам.
- NoSQL (MongoDB, Cassandra) — для документных или распределённых сценариев с особыми требованиями к масштабированию.
Выбор базы зависит от требований к целостности данных, транзакциям, согласованности и горизонтальному масштабированию.
Практические рекомендации по безопасности
- Создавайте отдельного пользователя PostgreSQL с минимальными привилегиями для Django-приложения.
- Используйте SSL для шифрования соединений между приложением и базой на удалённых серверах.
- Храните пароли и секреты в переменных окружения или менеджерах секретов (Vault, AWS Secrets Manager и т. п.).
- Ограничьте доступ к базе через pg_hba.conf и фаервол. Разрешайте подключения только с доверенных хостов.
- Регулярно обновляйте PostgreSQL и системные пакеты.
Пример создания роли и назначения базы данных (в psql от имени postgres):
$ sudo -i -u postgres
$ psql
postgres=# CREATE ROLE myapp_user WITH LOGIN PASSWORD 'secure_password';
postgres=# CREATE DATABASE myapp_db OWNER myapp_user;
postgres=# GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
postgres=# \qНе храните реальные пароли в репозитории.
Резервное копирование и миграция данных
- Для резервного копирования используйте pg_dump для логических дампов:
$ pg_dump -U myapp_user -h localhost -Fc myapp_db > myapp_db.dump- Для восстановления используйте pg_restore:
$ pg_restore -U myapp_user -h localhost -d target_db myapp_db.dump- Для переносов между версиями PostgreSQL проверяйте совместимость и тестируйте миграции на staging перед production.
Чек-листы по ролям
DevOps:
- Создать сервисного пользователя и базу.
- Настроить резервное копирование и мониторинг дискового пространства.
- Настроить SSL и правила доступа.
- Обновить pg_hba.conf и перезапустить службу.
Разработчик:
- Добавить DATABASES конфигурацию в settings.py через переменные окружения.
- Проверить миграции локально и на staging.
- Написать unit-тесты для моделей и операций CRUD.
QA:
- Проверить CRUD-операции через Django shell и через API.
- Тестировать поведение при повреждённых данных и при высокой нагрузке.
- Проверить логи ошибок и корректную обработку исключений.
Критерии приёмки
- Приложение подключается к PostgreSQL без ошибок.
- Миграции применяются и таблицы созданы в целевой базе.
- CRUD-операции успешно выполняются через ORM и API.
- Резервная копия создаётся и успешно восстанавливается на тестовом окружении.
Набор тест-кейсов
- Создать запись Profile через ORM и проверить, что запись появилась в базе.
- Получить запись по pk и сравнить значения полей.
- Обновить поле name и проверить, что изменение применилось.
- Удалить запись и убедиться, что её больше нет.
- Попробовать подключиться с неверными учётными данными и убедиться, что доступ закрыт.
- Выполнить pg_dump и восстановление дампа на изолированной базе.
Мини-методология интеграции
- Установить PostgreSQL в тестовом окружении.
- Создать базу и сервисного пользователя.
- Настроить settings.py с использованием переменных окружения.
- Создать модели и выполнить миграции на staging.
- Запустить smoke-тесты CRUD и интеграционные тесты.
- Настроить резервное копирование и мониторинг, затем развернуть в production.
Лучшие практики и подсказки
- Используйте psycopg2-binary для быстрого локального запуска, но в production отдавайте предпочтение psycopg2.
- Храните миграции в системе контроля версий и применяйте их через CI/CD.
- Мониторьте индексы и исполнение медленных запросов (EXPLAIN ANALYZE).
- Используйте connection pooling (pgbouncer) при высоких нагрузках.
Краткое резюме
PostgreSQL — надёжная и функциональная реляционная СУБД, хорошо интегрируется с Django через psycopg2. Процесс включает установку СУБД, создание базы и пользователя, настройку settings.py, создание моделей и выполнение миграций. После этого CRUD-операции можно тестировать через Django shell или интеграционные тесты.
Важно: следите за безопасностью (рольми, SSL, ограничениями доступа), используйте резервные копии и проверяйте миграции на staging перед production.
Полезные ссылки для дальнейшего чтения
- Официальная документация PostgreSQL
- Руководство Django по настройке баз данных
Important: адаптируйте команды под вашу ОС и требования безопасности.
Похожие материалы
Утечка данных Equifax — как проверить и что делать
Как освободить место на iPhone
Как установить чистый Android на любой телефон
Сброс Siri на iPhone, iPad и Mac
Как удалить воду из динамиков iPhone