JavaRush /Курсы /Модуль 3: Django /Конфигурация баз данных в Django

Конфигурация баз данных в Django

Модуль 3: Django
2 уровень , 5 лекция
Открыта

Django из коробки поддерживает следующие базы данных:

  • SQLite (по умолчанию, легковесная реляционная БД).
  • PostgreSQL (отличный выбор для больших и масштабируемых проектов).
  • MySQL (популярный и надежный выбор).
  • Oracle (если у вас Enterprise решение и много денег).

Сейчас мы разберёмся, как все это подключить и настроить.

Основы конфигурации базы данных в Django

Параметр DATABASES в settings.py

Файл settings.py — это главный дирижер вашего проекта. И именно он отвечает за связь Django с выбранной базой данных. В секции настройки DATABASES описана конфигурация всех используемых баз данных. По умолчанию после создания проекта вы увидите такую запись:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',  # Движок для SQLite
        'NAME': BASE_DIR / 'db.sqlite3',        # Путь к файлу базы данных
    }
}

Поля конфигурации базы данных:

  1. ENGINE: Определяет движок базы данных. Например:

    • django.db.backends.sqlite3 — движок для SQLite.
    • django.db.backends.postgresql — для PostgreSQL.
    • django.db.backends.mysql — для MySQL.
  2. NAME: для SQLite это путь к вашему файлу базы данных. Для PostgreSQL/MySQL — это имя базы данных.

  3. USER: имя пользователя для подключения к базе данных (неактуально для SQLite, но нужно для других движков).

  4. PASSWORD: пароль пользователя для базы данных.

  5. HOST: локация базы данных (обычно localhost для локальной разработки или IP-адрес сервера).

  6. PORT: порт, используемый для подключения к базе данных (обычно 5432 для PostgreSQL, 3306 для MySQL).

Подключение к SQLite

SQLite поставляется с Django и используется по умолчанию. Это очень удобный вариант для локальной разработки и тестовых проектов. Никаких дополнительных настроек не требуется.

Но SQLite не идеален для продакшн-проектов (например, отсутствует полноценная поддержка конкурентных соединений). Поэтому чаще всего мы переезжаем на что-то более серьезное, например, PostgreSQL. Хватит изоляции, пора в город!

Настройка PostgreSQL

PostgreSQL — это как швейцарский нож, но для базы данных: функционально, масштабируемо и профессионально. Для настройки PostgreSQL нужно:

  1. Установить PostgreSQL на вашу систему (если еще не установлен).
  2. Установить драйвер psycopg2 для взаимодействия с PostgreSQL:
pip install psycopg2-binary
  1. Изменить настройки в settings.py:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # Движок PostgreSQL
        'NAME': 'mydatabase',                      # Имя базы данных
        'USER': 'mydatabaseuser',                  # Пользователь
        'PASSWORD': 'mypassword',                  # Пароль
        'HOST': 'localhost',                       # Адрес сервера
        'PORT': '5432',                            # Порт
    }
}
  1. Создать базу данных в PostgreSQL:
  • Откройте консоль PostgreSQL:
    psql -U postgres
    
  • Создайте новую базу данных:
    CREATE DATABASE mydatabase;
    
  • Создайте нового пользователя и задайте ему пароль:
    CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';
    
  • Дайте пользователю права на базу данных:
    GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;
    

Поздравляю, PostgreSQL настроен! Вы можете заказать себе кофе (или еще одну статью в блоге)!

Настройка MySQL

Если вы решили работать с MySQL, процесс будет похожим:

  1. Установите MySQL и настройте сервер (например, через Docker).
  2. Установите драйвер mysqlclient:
    pip install mysqlclient
  1. Настройте settings.py:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '3306',
    }
    }
    
  2. Создайте базу данных и пользователя (аналогично PostgreSQL). Если лень, можно использовать графический клиент вроде MySQL Workbench.

Особенности и нюансы подключения базы данных

  1. Ошибки подключения: если Django жалуется на "Connection Refused", проверьте:

    • Включен ли сервер базы данных.
    • Совпадают ли ваши данные доступа (USER, PASSWORD, HOST, PORT).
  2. База данных в продакшене:

    • Никогда не используйте SQLite в реальной инфраструктуре.
    • Храните пользовательские данные безопасно, используя шифрование (например, TLS).
  3. Переменные окружения:

    • Для безопасности рекомендуется скрывать параметры подключения в переменных окружения. Пример:

      import os
      
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql',
              'NAME': os.getenv('DB_NAME'),
              'USER': os.getenv('DB_USER'),
              'PASSWORD': os.getenv('DB_PASSWORD'),
              'HOST': os.getenv('DB_HOST', 'localhost'),
              'PORT': os.getenv('DB_PORT', '5432'),
          }
      }

Миграции и управление базой данных

Чтобы изменения в моделях Django применялись в базе данных, используются миграции. Это набор инструкций для изменения структуры базы.

  1. Создание миграций:

    python manage.py makemigrations
    
  2. Применение миграций:

    python manage.py migrate
    
  3. Просмотр состояния миграций:

    python manage.py showmigrations
    

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

Полезные советы

  • Тестовая база данных: Django может автоматически создавать временную базу данных для тестов. Не забудьте указать тип тестовой базы в настройках:

    TEST = {
        'NAME': 'test_database',
    }
    
  • Резервное копирование (Backup): регулярно выполняйте бэкапы базы данных. В PostgreSQL это можно сделать командой:
    pg_dump mydatabase > backup.sql
    

Теперь вы знаете, как настроить базы данных для вашего Django проекта. Осталось только выбрать подходящий вариант и подключить! (А для продакшена не забудьте о безопасности.)

1
Задача
Модуль 3: Django, 2 уровень, 5 лекция
Недоступна
Подключение SQLite базы данных
Подключение SQLite базы данных
1
Задача
Модуль 3: Django, 2 уровень, 5 лекция
Недоступна
Подключение PostgreSQL базы данных
Подключение PostgreSQL базы данных
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ