Администрирование

Подключение PostgreSQL к Django-проекту

Просмотры: 1605
Категория: Администрирование
Создано: 27 августа 2024
Тэги: PostgreSQL Linux Python Ubuntu Django WSGI

Для подключения СУБД PostgreSQL с Django- проекту используется модуль Psycopg. Недавно вышла его третья версия и её можно, и даже нужно, использовать в своих Django-проектах. Но для этого Django должен быть версии 4.2+.

Итак, если надо, обновляем Django до этой, или более свежей, версии.

pip install --upgrade Django==4.2.15

Теперь устанавливаем psycopg

pip install --upgrade psycopg[c]

Для того, чтобы pip сконфигурировал и скомпилировал этот модуль, ему необходима утилита pg_config. Если она не находится, то нужно добавить путь к ней и опять запустить указанную команду.

Если pip ругается, что не может найти заголовочный файл pg_config.h, значит нужно поставить devel-пакет для PostgreSQL сервера. На Ubuntu его можно найти в списке, который выведет команда

apt search postgresql devel

Когда всё прошло успешно, можем старый psycopg2 удалить

pip uninstall psycopg2

и перезапустить UWSGI или Gunicorn, смотря на чём работает ваш Django-проект:

sudo systemctl restart emperor.uwsgi

Теперь ваш Django-проект работает (если работает) на новом драйвере psycopg. Если не работает, ищем причину или, в крайнем случае, возвращаемся на depricated версию psycopg2.

Теперь займемся настройкой подключения Django-проекта к базе данных. Раньше в файл settings.py вносили такие данные:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

В новой документации Django говорят, что подключаться надо так:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {
            "service": "my_service",
            "passfile": ".my_pgpass",
        },
    }
}

Сначала создадим файл для сервисов, где укажем наш my_service. Сначала пытаемся выяснить, где PostgreSQL ищет файлы с прописанными там сервисами. Они находятся либо в домашней директории пользователя в ~/.pg_service.conf, либо в глобальном файле pg_service.conf. Но положить его нужно в правильную директорию. Найти эту директорию несложно. Вызываем

pd_config --sysconfdir

и в указанной директорию (это может быть /etc, либо /usr/local/etc, либо /etc/postgresql-common, либо что-то еще) создаём файл pg_service.conf с таким содержанием

[my_service]
host=localhost
user=USER
dbname=NAME
port=5432

Вместо my_service указываем то имя, которое мы прописали в settings.py. Понятно, что USER — это имя пользователя, подключающегося к БД, а NAME — имя базы данных нашего проекта.

Теперь создадим файл с паролем, для подключения к БД. Пусть наш проект на сервере живёт в директории /var/www/myproject. Переходим туда

cd /var/www/myproject

Здесь создаём файл .my_pgpass

nano .my_pgpass

В него помещаем данные о подключении к БД

localhost:5432:NAME:USER:PASSWORD

Здесь NAME — имя базы данных, USER — имя пользователя, подключающегося к ней, PASSWORD — пароль для подключения. Наш файл settings.py должен теперь выглядеть так:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {
            "service": "my_service",
            "passfile": "/var/www/myproject/.my_pgpass",
        },
    }
}

Остались последние штрихи. Первое, меняем права доступа к парольному файлу:

chmod 0600 /var/www/myproject/.my_pgpass

Кроме того, необходимо установить правильного владельца этого файла. Чаще всего Django-проекты запускаются от имени пользователя www-data. Если это не так, ищем имя этого пользователя в настройках UWSGI или Gunicorn. Меняем владельца

sudo chown www-data:www-data /var/www/myproject/.my_pgpass

И перезапускаем проект

sudo systemctl restart emperor.uwsgi

Если все было сделано правильно, Django-проект запуститься с новыми настройками. Если что-то пошло не так и получаем 500-ю ошибку сервера, включаем Debug и пытаемся найти ошибки.

В результате наших действий мы получим работающий на последней третьей версии Psycopg с настройками для подключения с помощью сервисного и парольного файлов.

Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене

Новое видео
Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»
Поддержать автора сайта!
​ Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.
Расписание пробников Статграда в 2026/27 учебном году
Информатика ОГЭ 9 класс
  1. 13 октября 2026 года
  2. 3 декабря 2026 года
  3. 21 января 2027 года
  4. 19 февраля 2027 года
  5. 23 марта 2027 года
  6. 27 апреля 2027 года
Математика ОГЭ 9 класс
  1. 23 сентября 2026 года
  2. 1 декабря 2026 года
  3. 22 января 2027 года
  4. 3 марта 2027 года
  5. 14 апреля 2027 года
Физика ОГЭ 9 класс
  1. 19 октября 2026 года
  2. 10 декабря 2026 года
  3. 29 января 2027 года
  4. 17 марта 2027 года
  5. 22 апреля 2027 года
Математика ЕГЭ 10 класс
  1. 3 февраля 2027 года
  2. 11 мая 2027 года
Информатика ЕГЭ 11 класс
  1. 22 октября 2026 года
  2. 15 декабря 2026 года
  3. 26 января 2027 года
  4. 2 марта 2027 года
  5. 13 апреля 2027 года
Математика ЕГЭ 11 класс
  1. 30 сентября 2026 года
  2. 17 декабря 2026 года
  3. 9 февраля 2027 года
  4. 16 марта 2027 года
  5. 21 апреля 2027 года
Физика ЕГЭ 11 класс
  1. 14 октября 2026 года
  2. 16 декабря 2026 года
  3. 4 февраля 2027 года
  4. 12 марта 2027 года
  5. 9 апреля 2027 года