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)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Марк Рівень 49
1 січня 2026
Підключення бази даних SQLite - не проходить перевірку, помилок не виводить