Гид по технологиям

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

7 min read Database Обновлено 31 Dec 2025
PostgreSQL + Django: установка и CRUD
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

Успешная установка psycopg2 в терминале

Если при установке возникают ошибки сборки, убедитесь, что установлены пакеты разработки для 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.
  • Резервная копия создаётся и успешно восстанавливается на тестовом окружении.

Набор тест-кейсов

  1. Создать запись Profile через ORM и проверить, что запись появилась в базе.
  2. Получить запись по pk и сравнить значения полей.
  3. Обновить поле name и проверить, что изменение применилось.
  4. Удалить запись и убедиться, что её больше нет.
  5. Попробовать подключиться с неверными учётными данными и убедиться, что доступ закрыт.
  6. Выполнить pg_dump и восстановление дампа на изолированной базе.

Мини-методология интеграции

  1. Установить PostgreSQL в тестовом окружении.
  2. Создать базу и сервисного пользователя.
  3. Настроить settings.py с использованием переменных окружения.
  4. Создать модели и выполнить миграции на staging.
  5. Запустить smoke-тесты CRUD и интеграционные тесты.
  6. Настроить резервное копирование и мониторинг, затем развернуть в 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: адаптируйте команды под вашу ОС и требования безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Утечка данных Equifax — как проверить и что делать
Кибербезопасность

Утечка данных Equifax — как проверить и что делать

Как освободить место на iPhone
Мобильные устройства

Как освободить место на iPhone

Как установить чистый Android на любой телефон
Android.

Как установить чистый Android на любой телефон

Сброс Siri на iPhone, iPad и Mac
Руководство

Сброс Siri на iPhone, iPad и Mac

Как удалить воду из динамиков iPhone
iPhone советы

Как удалить воду из динамиков iPhone

Как освободить место на Mac — простой план
Mac

Как освободить место на Mac — простой план