Django База [2023]: Установка PostgreSQL в Django 💾 #33
Django

Django База [2023]: Установка PostgreSQL в Django 💾 #33

Razilator

В этой статье мы покажем, как установить и настроить PostgreSQL для использования в Django проектах. Мы рассмотрим процесс установки PostgreSQL, настройку базы данных в Django, а также подключение к базе данных PostgreSQL с помощью Python библиотеки psycopg2.

Установка postgreSQL на ПК

Если мы хотим установить на локальную машину PostgreSQL, то переходим на официальный сайт и скачиваем Postgres.

Скачиваем PostgreSQL
Скачиваем PostgreSQL
Мы будем использовать версию для Windows, выбираем версию x86-64
Мы будем использовать версию для Windows, выбираем версию x86-64

После скачивания, начинаем установку. Все оставляем по умолчанию.

Пароль при требовании придумайте любой, я на локальной машине использую: root

Процесс установки
Процесс установки

Установка PostgreSQL в Django

Далее в терминале нам необходимо установить драйвер для работы с СУБД: pip install psycopg2

Результат установки:

Терминал
(venv) PS C:\Users\Razilator\Desktop\Base\backend> pip install psycopg2
Collecting psycopg2
  Using cached psycopg2-2.9.5-cp311-cp311-win_amd64.whl (1.2 MB)
Installing collected packages: psycopg2
Successfully installed psycopg2-2.9.5

[notice] A new release of pip available: 22.3 -> 23.0
[notice] To update, run: python.exe -m pip install --upgrade pip
(venv) PS C:\Users\Razilator\Desktop\Base\backend> 

Запускаем pgAdmin

В меню пуск введите в поиске pgAdmin, подключитесь по созданному паролю при установке.

Находим, запускаем
Находим, запускаем

Если пароль не работает, можете восстановить его Reset Master Password.

Подключаемся
Подключаемся
После авторизации
После авторизации

Теперь нам необходимо создать базу данных для нашего сайта (нажать левой кнопкой мыши на Базы Данных и создать базу данных):

Создаем БД с названием App
Создаем БД с названием App
База данных успешно создана
База данных успешно создана

Сохранение данных для переноса БД из SQLITE в PostgreSQL в Django

Если вы не хотите терять данные, которые вы написали за время уроков, это статьи, зарегистированные пользователи, категории, то до следующего пункта настроек мы можем воспользоваться созданием копии базы данных для последующего переноса в PostgreSQL.

Чтобы создать дамп базы данных, нам необходимо в терминале прописать следующую команду: python manage.py dumpdata --exclude contenttypes --output db.json, также мы можем исключать ненужные таблицы добавляя исключения в команду: --exclude auth.permission --exclude admin.logentry, таким образом мы исключим ещё логи и права доступа.

Если вы далаете дамп из под Windows, у вас может возникнуть проблема с кодировкой, в этом случае команда будет следующая: python -Xutf8 manage.py dumpdata --exclude contenttypes --output db.json. Данной командой мы создадим дамп базы данных в json формате. Исключим contenttypes, из дампа, чтоб не возникло лишних ошибок при импорте базы данных при использовании PostgreSQL.

После успешной настройки БД PostgreSQL, вы можете восстановить дамп следующей командой: python manage.py loaddata db.json, если возникла проблема при восстановлении с кодировкой, то восстановите дамп через следующую команду: python -Xutf8 manage.py loaddata db.json

Настройка Django для работы с PostgreSQL

Далее нам необходимо изменить конфигурационный файл settings.py, в нём мы добавим новые настройки для базы данных вместо старых:

Найдите эти настройки:

settings.py
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

И вместо них добавьте следующие:

settings.py
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '<dbname>',
        'USER': 'postgres',
        'PASSWORD': '<password>',
        'HOST': 'localhost',
        'PORT': 5432,
    }
}

Таким образом мы настроим Django на работу с Postres.

К сожалению наши пользователи и статьи удалятся, поэтому делать лучше Postgres заранее, сразу после создания проекта. Но мы же делаем это как dev версию, поэтому нам не страшно что-то тестировать и удалять. Заодно я почищу папки media, удалю sqlite файл. Примечание: учтите это при деплое, Postgres ставим сразу! Но до него ещё доберемся.

Далее после установки проводим миграции и создаем суперпользователя:

Терминал
(venv) PS C:\Users\Razilator\Desktop\Base\backend> py manage.py makemigrations
No changes detected
(venv) PS C:\Users\Razilator\Desktop\Base\backend> py manage.py migrate       
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions, sites, system, taggit
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying taggit.0001_initial... OK
  Applying taggit.0002_auto_20150616_2121... OK
  Applying taggit.0003_taggeditem_add_unique_index... OK
  Applying taggit.0004_alter_taggeditem_content_type_alter_taggeditem_tag... OK
  Applying taggit.0005_auto_20220424_2025... OK
  Applying blog.0001_initial... OK
  Applying blog.0002_alter_article_slug_alter_article_thumbnail... OK
  Applying blog.0003_alter_article_time_create_comment_and_more... OK
  Applying blog.0004_article_tags... OK
  Applying sessions.0001_initial... OK
  Applying sites.0001_initial... OK
  Applying sites.0002_alter_domain_unique... OK
  Applying system.0001_initial... OK
  Applying system.0002_alter_profile_avatar... OK
  Applying system.0003_alter_profile_avatar_alter_profile_bio_and_more... OK
  Applying system.0004_feedback... OK
(venv) PS C:\Users\Razilator\Desktop\Base\backend> py manage.py createsuperuser

Авторизуюсь с созданного пользователю и добавлю пару статей для будущих уроков.

Добавленные статьи
Добавленные статьи

Также взглянем на наши таблицы в базе данных:

Как видите, все таблицы созданы, все работает
Как видите, все таблицы созданы, все работает
;