Django База [2023]: Установка PostgreSQL в Django 💾 #33
В этой статье мы покажем, как установить и настроить PostgreSQL для использования в Django проектах. Мы рассмотрим процесс установки PostgreSQL, настройку базы данных в Django, а также подключение к базе данных PostgreSQL с помощью Python библиотеки psycopg2.
Если вы хотите выразить благодарность автору сайта, статей и курса по Django, вы можете сделать это по ссылке ниже:
Установка postgreSQL на ПК
Если мы хотим установить на локальную машину PostgreSQL, то переходим на официальный сайт и скачиваем Postgres.
После скачивания, начинаем установку. Все оставляем по умолчанию.
Пароль при требовании придумайте любой, я на локальной машине использую: 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.
Теперь нам необходимо создать базу данных для нашего сайта (нажать левой кнопкой мыши на Базы Данных и создать базу данных):
Сохранение данных для переноса БД из 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, в нём мы добавим новые настройки для базы данных вместо старых:
Найдите эти настройки:
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
И вместо них добавьте следующие:
# 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
Авторизуюсь с созданного пользователю и добавлю пару статей для будущих уроков.
Также взглянем на наши таблицы в базе данных: