Django 5 для начинающих

Прогресс по курсу:  9/1004

6.10 Установка базы данных PostgreSQL
3 из 4 шагов пройдено
0 из 3 баллов  получено

Создание базы данных PostgreSQL

Давайте создадим пользователя базы данных PostgreSQL.
Мы будем использовать интерфейс PostgreSQL на основе терминала - psql.

Чтобы начать использовать psql, необходимо в меню Пуск - Все Приложения найти папку PostgreSQL 15
и запустить SQL Shell (psql):

Введем данные для входа в нашу БД и вы увидите следующий ниже результат:

Введите следующую ниже команду, чтобы создать пользователя, который может создавать базы данных:

CREATE USER blog WITH PASSWORD 'xxxxxx';

Замените xxxxxx на желаемый пароль и выполните команду. Вы увидите такой результат:

CREATE ROLE

Пользователь был создан. Теперь давайте создадим базу данных blog и передадим права на владение этой базой данных только что созданному пользователю.

Исполните следующую ниже команду:

CREATE DATABASE blog OWNER blog ENCODING 'UTF8';

Этой командой мы сообщаем PostgreSQL, что нужно создать базу данных с именем blog, мы передаем право на владение базой данных blog её пользователю, которого мы создали ранее, и указываем, что для новой базы данных должна использоваться кодировка UTF8. Вы увидите следующий ниже результат:

CREATE DATABASE

Мы успешно создали пользователя PostgreSQL и базу данных.

 

Выгрузка существующих данных

Перед переключением на другую базу данных необходимо выгрузить существующие в проекте Django данные из базы данных SQLite. Мы экспортируем данные, переключаем базу данных проекта на PostgreSQL и импортируем данные в новую базу данных.

Django предлагает простой способ загрузки и выгрузки данных из базы данных в файлы, которые называются фикстурами. Django поддерживает фикстуры в форматах JSON, XML или YAML. Мы собираемся создать фикстуру со всеми данными, содержащимися в базе данных.

Команда dumpdata выгружает данные из базы данных в стандартный вывод, по-умолчанию сериализованный в формате JSON. Результирующая структура данных включает информацию о модели и ее полях, позволяя Django загружать ее в базу данных.

Выгружаемые данные можно ограничивать моделями приложения, предоставив команде имена приложений либо указав отдельные модели для вывода данных, используя формат app.Model. Также можно указывать формат, используя флаг --format.

По умолчанию dumpdata выводит сериализованные данные в стандартный вывод. Однако, используя флаг --output, можно указать выходной файл. Флаг --indent позволяет указывать отступ.

Дополнительную информацию об опциях команды dumpdata можно получить, выполнив команду python manage.py dumpdata --help.

Исполните следующую ниже команду из командной оболочки:

python -Xutf8 manage.py dumpdata --indent=2 --output=mysite_data.json

Вы увидите результат, аналогичный приведенному ниже:

Все существующие данные были экспортированы в формат JSON в новый файл с именем mysite_data.json.

Содержимое файла можно просмотреть, что-бы увидеть структуру JSON, которая включает в себя разнообразные объекты данных различных моделей установленных вами приложений.


В следующем шаге мы переключим базу данных в проекте Django, а затем импортируем данные в новую базу данных.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Если при выполнении команды вы получаете ошибку кодировки, то включите флаг -Xutf8, как показано ниже, чтобы активировать режим Python UTF-8:

На следующем шаге у многих возникли ошибки с кодировкой. Предлагаю убрать в тексте "если" и прописать флаг -Xutf8 во все команды как для dumpdata, так и для loaddata - навредит он вряд ли, а помочь избежать проблем может

@ilya_kutaev, спасибо, сделал.

У меня почему-то не работают команды


@Кислинский_Роман, Про кавычки не забывайте и точку с запятой в конце.

 

@Кислинский_Роман, после команд ставьте обязательно ';'

@Илья_Перминов, Я уже через PgAdmin создал)

Добрый день.
Могу ошибаться, но гранты раздать не надо? У меня следующий шаг не пошел
 

grant usage on schema public to blog;

grant create on schema public to blog;

@Evgeny_Bulokhov, а зачем? Пользователь blog является владельцем БД blog.

Возникла ошибка после ввода пароля.

FATAL:  password authentication failed for user "postgres"

Что делаю не так? 
система mac os

@Vasily_Mantsagov, Вводите не тот пароль, который вы указали при установке PostgreSQL. Или пробуйте все варианты, или можете воспользоваться этим материалом чтобы попробовать изменить пароль.

@Илья_Перминов, устанавливал через командную строку и там не было шага с вводом (созданием) пароля

@Vasily_Mantsagov, ставили черех Homebrew? Попробуйте выполнить следующие команды, первая создаст админа, далее попробуйте зайти в консоль PostgreSQL через вторую команду. Если все получится, то можно будет выполнять команды по курсу.

createuser -P -s postgres
psql postgres

А вообще лучше было скачать инсталер для Mac, там и pgAdmin и SQL Shell.

Можете выполнить команду:

brew list

Там в списке найти postgresql16(число может быть другое, смотря какая версия установлена), и потом выполнить команду:

brew uninstall postgresql16

Так вы удалите PostgreSQL, и установить уже через инсталятор с офф сайта.

@Илья_Перминов, устанавливал через homebrew. Пробовал уже деинстал через командную строку но не помогло. Пробовал через PG Admin но тоже ругается той же ошибкой. Попробую команды указанные выше. Напишу по итогу. Спасибо 

@Vasily_Mantsagov,   получилось решить проблему?