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

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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство