Подключение postgresql к django windows
Допустим, есть у нас такая ситуация, что проект на Django установлен а использованием локальной БД SQLite и нам необходимо это все экспортировать в реляционную БД на примере PostgreSQL.
Реляционные системы управления базами данных являются ключевым компонентом многих веб-сайтов и приложений. Они обеспечивают структурированный способ хранения, организации и доступа к информации.
Установка и настройка PostgreSQL на Ubuntu
Репозитории Ubuntu по умолчанию содержат пакеты Postgres, поэтому их можно установить с помощью apt-системы. Перед этим обновим свой локальный индекс пакета. Затем установим пакет Postgres вместе с пакетом -contrib, который добавит некоторые дополнительные утилиты и функции
Командная строка терминала теперь будет начинаться с postgres@yourserver.
Теперь заходим в режим команд SQL и интерфейса PostgreSQL
Создаем пользователя для БД проекта
Мы устанавливаем кодировку по умолчанию для UTF-8, которую ожидает Django. Мы также устанавливаем схему изоляции транзакций по умолчанию «read commit», которая блокирует чтение из незафиксированных транзакций. Наконец, мы устанавливаем часовой пояс. По умолчанию наши проекты Django будут настроены на использование UTC
Теперь все, что нам нужно сделать, это предоставить нашим пользователям права доступа к базе данных, которую мы создали
Выходим из режима ввода SQL, чтобы вернуться к сеансу оболочки postgres
Выходим из сеанса оболочки postgres, чтобы вернуться к сеансу оболочки обычного пользователя
Настройка проекта Django на использование
PostgreSQL
Теперь, когда наша база данных настроена, мы можем установить Django. Для большей гибкости мы установим Django и все его зависимости в виртуальной среде Python
Создание и настройка виртуальной среды
Создаем виртуальную среду для хранения зависимостей Python проекта Django, набрав команду
Это установит локальную копию Python и pip[pip3] в каталог myprojectenv
Прежде, чем создать проект Django нужно сначала активировать виртуальную среду, которую мы создали шагом выше
После этой команды строка запроса будет похожа на (myprojectenv)user@host.
В окружении проекта устанавливаем пакеты Django и psycopg2, который является бэкэндом для PostgreSQL
Замечение. Тут еще один момент, связанный с psycopg2. Начиная с версии 2.8 данный пакет будет переименован в psycopg2-binary и поэтому нужно дополнительно установить данный пакет с этим названием
В противном случае, может возникнуть предупреждение такого рода
Дополнительно про это можно узнать по ссылке.
Создание и настройка проекта Django
Теперь мы можем запустить проект Django в нашей директории myprojectenv. Это создаст дочерний каталог с именем проекта myproject , в котором будет еще одна папка с тем же названием для хранения самого кода и создаст сценарий управления в текущем каталоге. Не забудьте добавить точку в конце команды, чтобы она была правильно настроена
Теперь нам надо отредактировать файл настроек myproject/myproject/settings.py проекта на то, чтобы проект, вместо базы SQLite, который стоит по умолчанию начал работать с базой Postgre, который мы выше настроили и для этого открываем этот файл настроек и ищем там строки
и заменяем это все на
Сохраняем и закрываем этот файл.
Миграция баз данных на использование Postgre и запуск проекта
Теперь, когда настройки Django настроены, мы можем перенести наши структуры данных в нашу базу данных и протестировать сервер.
После создания структуры базы данных мы можем создать учетную запись администратора проекта, набрав
Вам будет предложено выбрать имя пользователя, указать адрес электронной почты и выбрать и подтвердить пароль для учетной записи
На этом интеграция и запуск закончена. Остается любоваться результатом через адрес сервера и порт 8001, на котором запущен наш проект Django с БД Postgree
Импорт данных из SQLite в PostgreSQL
в проекте Django
Окей. Выше мы рассмотрели, как интегрировать проект Django с Postgre, но что если в SQLite есть уже данные, которые нужно перенести в Postgre SQL?
Выгружаем существующие данные из SQLite, причем, в настройках settings.py нужно настроить на использование SQLite
Изменяем settings.py на использование Postgres backend. Выше мы это уже рассматривали как делать.
Убедитесь, что вы можете подключиться к PostgreSQL. Затем
Приветствую! В прошлой статье мы выполнили деплой приложения Django на сервере с операционной системой Ubuntu 20.04. В этой статье мы продолжим эту инструкцию, а именно установим и подключим мощную и функциональную базу данных PostgreSQL к нашему Django приложению.
По-умолчанию Django использует базу данных SQLite, но это не самый лучший вариант для хранения информации. Поэтому работать мы будем именно с PostgreSQL.
1. Добавление PPA
PostgreSQL - популярный сервер баз данных и он имеется в официальных репозиториях. Но мы хотим использовать самую последнюю версию программы. Для этого нужно добавить в систему PPA (Personal Package Archive) с помощью команд:
2. Обновляем пакеты
3. Устанавливаем PostgreSQL
На момент написания статьи последней актуальной версий являлась PostgreSQL-12. Проверить последнюю версию можно на официальном сайте БД. В случае обновления можно просто заменить версию в команде, например, sudo apt install postgresql-13.
4. Открываем консоль PostgreSQL
5. Задаем пароль для администратора БД
6. Создадим суперпользователя
Создадим и настроим пользователя, при помощи которого будем соединяться с базой данных из Django (делать все через суперпользователя - не самая хорошая идея). Также укажем значения по умолчанию для кодировки, уровня изоляции транзакций и временного пояса. Вводим поочередно следующие команды:
Здесь hostgeek_db - это имя пользователя, а testpassword18 - пароль. Указывайте свои индивидуальные значения.
7. Создаем базу данных для нашего проекта
Здесь first_db - это название базы данных, а hostgeek_db - имя пользователя, который был создан в предыдущем пункте.
8. Выходим из консоли PostgreSQL команой:
9. Активируем виртуальное окружение (если оно не активировано)
Подробно об этом было расписано в прошлой статье по деплою Django. Активируется виртуальное окружение командой:
Конечно, эта команда зависит от пути, в который вы установили виртуальное окружение. Но у меня оно активируется таким образом.
10. В виртуальное окружение проекта устанавливаем бэкэнд для PostgreSQL
11. Отредактируем файл настроек Django
Полностью удаляем раздел DATABASES = <. >и заменяем на следующий код:
12. Перезапускаем Gunicorn
Для активизации этих изменений нужно перезапустить Gunicorn. Для этого вводим команду:
Жмем F4 (Filter) и вводим слово gunicorn. Так мы из общей массы отсортируем только процессы Gunicorn. Жмем на клавиатуре стрелку вниз и "киляем" все процессы поочередным нажатием клавиш F9 - 1 (SIGHUP) - Enter. Как видно, после "убийства" процессов они тут же запускаются автоматически, значит все работает правильно
Выходим из htop нажатием клавиши F10.
13. Выполним миграцию базы данных
Перейдем в папку
/myapps/parser/siteparser (папка, в которой лежит файл manage.py):
Выполним команду миграции БД:
14. Создадим суперпользователя Django
Под этим пользователем мы будем авторизовываться в админ-панели Django.
15. Перезапускаем Gunicorn (повторяем пункт 12 этой статьи)
16. Авторизуемся в админке
Для подключения стилей откроем конфигурационный файл Nginx:
Добавим в него следующий код и сохраним файл:
После этого админка будет отображаться корректно:
На этом подключение базы данных PostgreSQL к фреймворку Django завершено. В следующей статье разберем настройку Memcached.
Если у вас возникли какие-либо вопросы по этой статье, то задавайте их в комментариях, мы обязательно ответим. Спасибо за внимание!
Разработка сайта на Django - урок 03: миграция с SQLite в PostgreSQL
Разработка сайта на Django - урок 03: миграция с SQLite в PostgreSQL
В предыдущем уроке мы провели миграцию для создания модели слайдера. Сейчас мы продолжим, но нам надо перейти с SQLite на PostgreSQL.
Для работы Django с PostgreSQL надо установить psycopg2
Далее, так как часть наших данных уже есть в SQLite, то надо сделать копию этих данных, для переноса в базу данных PostgreSQL.
python manage.py dumpdata > db.json
Этой командой мы создаем файл db.json
После этого нам надо настроить подключение к базе данных PostgreSQL в файле settings.py.
Потом производим следующие команды:
python manage.py migrate
python manage.py loaddata db.json
Можете проверить работоспособность после этого, все работает. Теперь идем дальше.
В прошлый раз мы закончили с созданием модели слайдера в файле models.py. По сути модель Slider представляет собой таблицу, с полями: name, title, description, slideimg, которые представляют собой поля в таблице. Это можно посмотреть 2-мя способами.
1 способ - это зайти в саму базу PostgreSQL
2 способ - это подключить PyCharm к базе. Подключение осуществляется следующим образом
После этого таблицы можно просматривать в PyCharm
Теперь приступим к работе с моделью слайдера. Сам слайдер я реализовал самым простым способом, то есть слайдеры будут создавать как записи в блоге, но можно было бы сделать один элемент, а в нем добавлять изображения и заголовки на слайд. Такой подход реализуем на других примерах.
Расширим нашу модель слайдера валидацией полей, этот момент не сильно много разбирается в других статьях, но просто приведу пример использования, чаще всего именно его не хватает.
from django.db import models
from django.core.validators import MaxLengthValidator
После того, как доступ к серверу с Ubuntu 16.04 был настроен в одной из предыдущих статей , настало время развернуть на нём всё необходимое для работы сайта, а именно:
Шаг 1 - обновление системы
Сделаем обновление существующих пакетов. Мало ли, система имеет устаревшие пакеты.
Шаг 2 - Установка всех необходимых пакетов без установки виртуального окружения
Установим пачкой все необходимые пакеты, которые не будут использоваться через virtualenv, а именно Python 3, PostgreSQL, Nginx.
Pip я в итоге устанавливал отдельно через утилиту easy_install3 , которая идёт в комплекте python3-setuptools , во-первых потому, что тогда ставится последняя версия, а вторых в случае установки через apt-get были ошибки при установке пакетов в virtualenv.
Шаг 3 - Создание базы данных и пользователя базы данных
А теперь создадим базу данных и пользователя, дав расширенные права пользователю postgres через утилиту sudo, который создаётся при установке PostgreSQL.
Выполнив данную команду, мы попадём в консоль PostgreSQL, где и создадим необходимую базу данных и пользователя, от имени которого будет подключаться Django приложение к этой базе данных.
Создадим базу данных:
Далее настройка пользователя проекта. Кодировку он будет использовать UTF8, поскольку данная кодировка используется и Django, а Python файлы рекомендует хардкодить с кодировкой UTF8, особенно, если в них присутствует текст, который будет отображаться на страницах сайта. Также устанавливается уровень изоляции в базе данных. То есть когда будут доступны данные для чтения. В данном случае после подтверждения транзакции в общем случае. Конечно, имеются случаи, когда данные доступны до подтверждения, но это отдельная тема для разговора. А также устанавливается тип временных зон, который для Django по умолчанию UTC.
Далее дадим права доступа к базе данных для этого пользователя:
Ну и выйдем из консоли PostgreSQL.
Если возникнут проблемы с кодировками на сервере, когда сервер будет иметь кодировку LATIN1, а базу данных нужно создать в UTF8, то обратитесь к следующей статье , где эта задача решается.
Шаг 4 - Установка виртуального окружения
Установим и активируем виртуальное окружение:
Шаг 5 - Установка драйвера PostgreSQL
Произведём установку следующей командой
Внутри виртуального окружения необходимо пользоваться командой pip , а не pip3Шаг 6 - Создание проекта
Перейдём в папку с виртуальным окружением, мы по-прежнему должны находиться в режиме работы в виртуальном окружении. И создадим проект.
Шаг 7 - Настройка подключения к базе данных
А теперь отредактируем конфигурационный файл Django, чтобы он подключался к базе данных PostgreSQL, а не создавал и в дальнейшем подключался к базе данных SQLite.
Для этого найдите в файле следующий кусок кода:
И замените его следующим, с учётом ваших данных для подключения к базе данных:
Шаг 8 - Выполнение миграций базы данных
Django обладает одним очень большим преимуществом - он имеет встроенную админку, что очень облегчает жизнь. Но чтобы она заработала, необходимо выполнить миграцию базы данных, то есть подготовить из моделей данных SQL запросы, которые сформируют структуру базу данных.
А ещё создадим суперпользователя, который будет администратором с максимальными правами доступа к вашему сайту. Выполните следующую команду и следуйте инструкциям.
Шаг 9 - Установка Gunicorn
Можете проверить, что сайт уже работает:
Шаг 10 - Настройка статических файлов
Django по умолчанию отдаёт статические файлы только в Debug режиме, который не используется на боевом сервере. Для боевого сервера все статические файлы из всех проектов собираются в отдельную специальную папку с помощью команды collectstatic , а саму папку необходимо указывать в файл settings.py.
И добавим строку, которая будет указывать, куда собирать статические файлы.
А теперь соберём всю статику в данный каталог:
Шаг 11 - Настройка Nginx
Отредактируем конфигурационный файл Nginx.
Удалим всё его содержимое и замени следующим.
И запустим gunicorn
После этого вы обнаружите, что сайт доступен уже на порту 80.
Шаг 12 - Настройка supervisor
Для того, чтобы сайт был доступен в любое время суток, необходимо настроить supervisor, который висит в памяти как служба и будет следить, чтобы сайта всегда работал.
Для стабильной работы Gunicorn необходимо создать его конфигурационный файл. Он будет располагаться рядом с файлом, который будет запускаемым для нашего web-приложения.
Добавим следующую конфигурационную информацию:
То есть мы указали, к какому порту привязываемся, и какой пользователь запускает процесс. А также количество рабочих процессов. В данном случае их три. Рассчитывается по следующей формуле:
workers = N cpu + 1
После чего создадим конфигурацию самого supervisor
Пропишем в него следующие настройки
А теперь запустим supervisor. Есть один нюанс при установке supervisor. Он не стартанул в качестве службы после того, как был установлен. Поэтому нужно принудительно добавить его в автозагрузку и запустить вручную, если не хотите перезагружать сервер.
Ну а дальше можно обновлять конфиги, проверять статус приложения сайта и его перезапуска.
При перезагрузке сервера всё будет стартовать автоматически
Примечание
Если вы изменили файлы проекта, то необходимо перезапускать gunicorn. Для этого достаточно активировать виртуальное окружение и воспользоваться командой killall
Supervisor автоматически запустит Gunicorn после этой команды, так что можете не беспокоиться, что сервер ляжет надолго. Не более секундного сбоя.
Читайте также: