Установка postgresql для django windows

Блог на Django #32: Установка PostgreSQL

Сейчас для проекта используется SQLite. Это необходимо для процесса разработки. Но для развертывания потребуется более мощная база данных: PostgreSQL, MySQL или Oracle. Сделаем выбор в пользу первой, чтобы получить ее функции полнотекстового поиска.

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

Затем установите саму базу данных:

Если у вас macOS или Windows, загрузите PostgreSQL с сайта https://www.postgresql.org/download/ и установите.

Также потребуется адаптер PostgreSQL под названием Psycopg2 для Python. Эта команда установит его:

Создадим базу данных PostgreSQL. Откройте консоль и введите следующие команды:

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

Отредактируйте файл settings.py и измените настройку DATABASES , чтобы она выглядела вот так:

Замените данные выше названием новой базы данных и данными нового пользователя. Новая база данных пустая. Запустите следующую команду, чтобы применить все миграции базы данных:

Наконец, создайте нового суперпользователя:

Можете запустить сервер разработки и перейти на административный сайт https://127.0.0.1:8000/admin/ с помощью новых данных.

Поскольку база данных поменялась, постов здесь нет. Заполните ее с помощью базовых постов так, чтобы можно было осуществлять поиск.

Подписывайтесь на канал в Дзене

Полезный контент для начинающих и опытных программистов в канале Лента Python разработчика — Как успевать больше, делать лучше и не потерять мотивацию.

Django+PostgreSQL за 8 шагов

На ночь глядя решился написать гайд по установке СУБД PostgreSQL для использования вместе с Django.

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

Я с этим мнением не согласен. И попытаюсь Вам это доказать.

За 8 простых шагов я покажу как установить PostgreSQL в Ubuntu 14.04 LTS и настроить Django для работы с ним.

  1. Ставим сам сервер PostgreSQL и библиотеку разработчика (она пригодится нам при установке бэкэнда)

Если вы решите использовать более свежую Ubuntu 16.04 LTS, то PostgreSQL там будет уже версии 9.5.

Открываем консоль PostgreSQL

Задаем пароль администратора БД

Создаем и настраиваем пользователя при помощи которого будем соединяться с базой данных из Django (ну очень плохая практика все делать через . суперпользователя). Заодно указываем значения по умолчанию для кодировки, уровня изоляции транзакций и временного пояса.

Временной пояс можно указать свой, согласно тому, который вы прописываете в settings.py проекта. А про страшное определение уровень изоляции транзакций, если оно вам не знакомо, лучше все таки прочитать из учебника по SQL — пригодится.

Создаем базу для нашего проекта

Выходим из консоли

В окружении проекта устанавливаем бэкэнд для PostgreSQL

Последний наш шаг — настроить раздел DATABASES конфигурационного файла проекта settings.py

Дальше все как обычно:

  • делаем миграцию ./manage.py migrate ,
  • создаем суперпользователя ./manage.py createsuperuser
  • и запускаем сервер ./manage runserver .

Если у вас настроен SSH на сервере, то можно еще научить pgAdmin с локальной машины управлять удаленным сервером PostgreSQL. Для этого мы можем создать ssh-тунель командой ssh -fNq -L 5555:localhost:5432 user@domain.com .

Читайте также:  Linux не удалось присоединить местоположение linux mint

Теперь можно из локального pgAdmin соединяться с удаленной БД по адресу localhost:5555 .

Как подключить PostgreSQL к Django

Прелюдия

Из коробки Django даёт возможность использовать SQLite, но мы то знаем, что лучше базы данных(далее БД) чем PostgreSQL не существует.

Подключение PostgreSQL к Django

Открываем файл settings.py и находим дефолтные настройки БД:

DATABASES = <
‘default’: <
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),
>
>

Закомментируем их, можете удалить если не нужны или поменять на следующие:

DATABASES = <
‘default’: <
‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’,
‘NAME’: ‘dbname’,
‘USER’: ‘username’,
‘PASSWORD’: ‘userpass’,
‘HOST’: ‘127.0.0.1’,
‘PORT’: ‘5432’
>
>

  • NAME — имя базы данных.
  • USER — пользователь БД.
  • PASSWORD — пароль пользователя.
  • HOST — 127.0.0.1 или localhost.
  • PORT — 5432.

Далее нам понадобится установить модуль psycopg2 для работы с PostgreSQL, устанавливаем:

Вот собственно и всё, осталось выполнить миграции.

$ python manage.py makemigrations
$ python manage.py migrate

Спасибо, что дочитали до конца. Вы меня очень поддержите, если поставите «Лайк», оставите комментарий или ПОДПИШИТЕСЬ на мой канал 🙂

Установка на сервер Django, Python, PostgreSQL и Nginx

Процесс установки интерпретатора Python, фреймворка Django, базы данных PostgreSQL и HTTP прокси NGINX на сервере Ubuntu 20.04.

Исходные данные

Установка будет производится на удаленном сервере, но то же самое можно развернуть и на localhost. Вместо 111.111.111.111 укажите свой IP адрес в интернете.

Установим Python на сервер

Перед любой установкой обновим пакеты операционной системы:

Создадим симлинк для обращения по команде pip вместо pip3:

PostgreSQL

Установим PostgreSQL на сервер:

Следом устанавливаем пакет psycopg2, который является python-postgreSQL адаптером:

Создаем виртуальную среду и устанавливаем Django

Заходим в папку пользователя. Отсюда будем работать дальше.

Создаем виртуальную среду в директории myproject:

Перейдем в эту директорию и активируем среду:

Теперь в этом окружении установим Django и gunicorn:

Запустим новый проект с PostgreSQL

Запустим проект hello_django следующей командой:

Это создаст новую директорию hello_django с файлами питона.

Отредактировуем там файл конфигурации setting.py:

Пропишем свои данные.

Найдем строку и запишем туда свой IP:

Следом впишем настройки нашей БД:

Сохраняем файл и выходим.

Сделаем миграцию данных в таблицу PostgreSQL

Мы должны находится в директории с файлом manage.py:

Там запускаем миграцию:

При успешной миграции:

Создадим супер пользователя. Он будет использоваться для входа на нашем сайте:

Дальше выбираем имя для пользователя проекта, email и пароль.

Собираем наш проект в статические файлы:

Иногда встречается ошибка:

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

В случае успеха будет создана папка static и появится сообщение:

Откроем порт для Firewall на котором будет запущен проект:

Запустим наш проект:

Command ‘python’ not found, did you mean:
command ‘python3’ from deb python3
command ‘python’ from deb python-is-python3

Могут возникнуть, если вы вышли из рабочей области. Заходим заново и запускаем:

Теперь можно зайти на страницу:

Где увидим предустановленную страницу Django:

В административную панель:

После авторизации попадаем в админку:

Настраиваем работу Django с HTTP-сервером Gunicorn

Перейдем в наш проект, чтобы использовать gunicorn для загрузки модуля WSGI:

[67658] [ERROR] Exception in worker process
Traceback (most recent call last):
File

lib/python3.8/site-packages/gunicorn/util.py», line 358, in import_app
mod = importlib.import_module(module)
File «/usr/lib/python3.8/importlib/__init__.py», line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File « «, line 1014, in _gcd_import
File « «, line 991, in _find_and_load
File « «, line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named ‘hello_django.wsgi’
[2020-05-24 22:44:37 +0200] [67658] [INFO] Worker exiting (pid: 67658)
[2020-05-24 22:44:37 +0200] [67656] [INFO] Shutting down: Master
[2020-05-24 22:44:37 +0200] [67656] [INFO] Reason: Worker failed to boot.
(myproject) root@nomerdoma1:/home/ploshadka/myproject#

Возникнут, если пытаться связать не ту директорию. Это должна быть директория, где находится файл settings.py.

Читайте также:  Не могу активировать windows 2012 r2 standard

В случае успешного запуска в консоли появится:

[2020-05-24 22:50:00 +0200] [67705] [INFO] Starting gunicorn 20.0.4
[2020-05-24 22:50:00 +0200] [67705] [INFO] Listening at: http://111.111.111.111:8080 (67705)
[2020-05-24 22:50:00 +0200] [67705] [INFO] Using worker: sync
[2020-05-24 22:50:00 +0200] [67707] [INFO] Booting worker with pid: 67707

Можем снова перейти на сайт и протестировать.

Настройка Django завершена. Теперь можно выйти из виртуальной среды:

Настраиваем systemd

Настроем systemd для автоматизации запуска и остановку приложения Django.

Для этого создадим и настроим файл systemd для Gunicorn:

[ Unit ]
Description =gunicorn daemon
After =network.target

[ Service ]
User =root
Group =www-data
WorkingDirectory = / home / ploshadka / myproject / hello_django
ExecStart = / home / ploshadka / myproject / bin / gunicorn —access-logfile — —workers 3 —bind unix: / home / ploshadka / myproject / hello_django / myproject.sock hello_django.wsgi:application

[ Install ]
WantedBy =multi-user.target

Сохраняем и выходим. Если ранее уже был запущен gunicorn.service и это повторное редактирование, то перед следующей командой запустите:

Теперь можем запустить «Зеленого Единорога»:

Проверим статус сервера:

При успешном запуске в директории hello_django там где manage.py появится файл myproject.sock.

Nginx

Установим дополнительные инструменты:

Создадим и отредактируем файл:

server <
listen 80 ;
server_name 111.111.111.111;

location = / favicon.ico < access_log off; log_not_found off; >
location / static / <
root / home / ploshadka;
>

location / <
include proxy_params;
proxy_pass http: // unix: / home / ploshadka / myproject / hello_django / myproject.sock;
>
>

Связываем этот файл с каталогом сайтов:

Проверим конфигурацию nginx на наличие ошибок:

Если ошибок нет:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

При отсутствии ошибок:

Если нам больше не нужен сервер разработки, порт 8000, то удалим его, чтобы перенаправить весь трафик на порт 80:

На этом установка завершена. Теперь наш сервер работает автономно. А по адресу нашего сайта мы увидим всё ту же взлетающую ракету:

Напоследок

Для того чтобы изменения в файле settings.py стали видны, перезапускаем «единорога»:

Читайте также

На сайте отсутствует реклама! Значете почему?

Помогать людям — моё хобби. А навыки разработчика позволяют не парится нулевой монетизизацией этого сайта. Хотя.

Если вам помогла информация, то даже от доната в 40 рублей мне будет приятно. Докину немного, куплю латте в макдаке, вспомню за чей счет банкет и карма вам зачтется!

Но и просто оставленный комментарий благодарности ниже принесет мне улыбку радости 🙂

А если захочется написать всякие гадости с переходом на личности, да тоже не стесняйтесь, но обычно я отправляю такое в спам. Люблю, когда дома чисто.

Добавить комментарий Отменить ответ

Если возникнут вопросы пишите на электронную почту.

Статьи о Джанго

В этой статье можно узнать о шагах, которые нужно предпринять, чтобы перенести проекты Django с MySQL на PostgreSQL.

База данных MySQL — хорошее начало для маленьких и средних проектов. Она известен и широко используется, имеет хорошую документацию. Также есть отличные клиенты для простого управления, такие как phpMyAdmin (web), HeidiSQL (Windows) или Sequel Pro (macOS).

Когда кто-то начинает задумываться о масштабировании проекта, то нужно выбирать что-то более подходящее. Это должна быть БД, которая быстрая, надежная и поддерживает стандарты ANSI для реляционных баз данных. То, что использует большинство разработчиков Django. И такой базой данных для большинства профессионалов является PostgreSQL. PostgreSQL позволяет использовать несколько специфичных функций от разработчиков, которые не доступны в MySQL, например многомерные массивы, поля JSON, поля пары ключ-значение, специальные нечувствительные к регистру текстовые поля, поля диапазонов, специальные индексы, нормальный полнотекстовый поиск и т.п. Для новичка, который хочет быстро влиться в разработку с использованием PostgreSQL, лучший клиент БД — pgAdmin (macOS, linux, windows ). Он может показаться слишком сложным сначала (по сравнению с клиентами MySQL), но поскольку в Django есть встроенная админка и удобный ORM, не будет частой необходимостью проверять базу данных в ее «родном» формате.

Читайте также:  Монитор сетевых подключений windows

Итак, что нужно для перехода от MySQL к PostgreSQL? Это можно сделать за несколько шагов, с использованием pgloader, чтобы помочь в миграции данных.

1. Подготовка MySQL базы

Негобходимо убедиться, что все миграции проведены:

Теперь можно сделать копию БД и перейти к миграции данных.

2. Установка pgloader

Установить pgloader можно используя средства дистрибутива или скачать из репозитория и собрать из исходных текстов.

3. Создание пользователя и базы в PostgreSQL

В отличие от MySQL, создание новых пользователей и баз данных PostgreSQL обычно происходит в оболочке, а не в клиенте базы данных.

Создадим пользователя и базу данных с таким же именем myproject.

4. Создание схемы

Свяжите проект с базой данных PostgreSQL в настройках, например:

В этом функция get_secret () возвращает конфиденциальную информацию из переменных окружения или текстового файла, который не отслеживается при управлении версиями. Но можно использовать любой свой предпочитаемый метод.

Запуск миграции для создания таблиц и связей в новой базе PostgreSQL:

5. Создание сценария переноса данных

Pgloader использует конфигурационные файлы с настройками, определяющими, как проводить с миграции. Создаем файл конфигурации myproject.load со следующим содержимым:

6. Запуск миграции данных

Как правило, вылезет большое количество предупреждений о преобразованиях типов. Обычно это можно проигнорировать, потому что сценарий будет стараться угадывать, как конвертировать данные при импорте. Если происходят ошибки, связанные с дублированием данных или таблиц с внешними ключами с потерянными записями, необходимо исправить проблемы в базе данных MySQL, а затем повторить этот процесс. Для этого нужно очистить базу данных MySQL, обновить локальную копию, заново создать базу данных PostgreSQL с помощью команд dropdb и createdb, запустить Django-миграции, чтобы создать схему базы данных, и снова скопировать данные.

7. Адаптация кода

Когда база данных будет успешно перенесена, необходимо запустить тесты проекта Django и исправить все проблемы, связанные с PostgreSQL. Код, написанный с использованием Django ORM, будет работать без проблем. Скорее всего возникнут проблемы с сырым SQL, методом extra() QuerySet и преобразованиями типов.

Как правило, это примерно такие различия:

  • Строковые значения в запросах PostgreSQL всегда оборачиваются ‘одиночными кавычками’.
  • PostgreSQL не конвертирует типы при сравнении значений автоматически, как это делает MySQL. Если используется какой-либо сырой SQL-код, нужно выполнить преобразование перед сравнением, например CAST(blog_post.id AS text) = likes_like.object_id или blog_post.id::text = likes_like.object_id . Последний синтаксис с двумя двоеточиями не понимат MySQL, поэтому, если нужно поддерживать обе базы данных, нужно для каждой версии БД свой код.
  • PostgreSQL чувствителен к регистру для сравнения строк, поэтому в фильтрах QuerySet нужно будет использовать *__iexact поиск вместо *__ exact и *__icontains вместо *__contains .
  • При сортировке преобразовывать столбец в нижний регистр с помощью функции Lower () :

При использовании *__in убедиться, что тип перечисленных элементов соответствует типу поля модели. Например, может быть модель Like с общим отношением, то есть content_type и object_id , которые вместе создают общий внешний ключ с любым экземпляром модели. Поле object_id обычно имеет тип строки, но идентификаторы связанных моделей могут быть целыми числами, строками или UUID . Если нужно получить понравившиеся сообщения, первичным ключам которых являются целые числа, нужно преобразовать значения object_id в целые числа, прежде чем назначать их для поиска pk__in в фильтре:

8. Повторить процесс на «боевом» сервере

После удачной локальной миграции можно приступать к миграции рабочего проекта.

Вывод

PostgreSQL имеет больше ограничений по работе с ним, чем MySQL, но обеспечивает большую производительность, большую стабильность и лучшее соответствие стандартам. Кроме того, в PostgreSQL существует множество функций, недоступных в MySQL. Если повезет, то можно перевести проект с MySQL на PostgreSQL за один день.

Оцените статью