Для хранения данных в веб-приложении, как правило, применются базы данных. И фреймворк Django уже по умолчанию предоставляет удобный функционал для работы с различными системами баз данных.
По умолчанию Django в качестве базы данных использует SQLite. Она очень проста в использовании и не требует запущенного сервера. Все файлы базы данных могут легко переноситься с одного компьютера на другой. Однако при необходимости мы можем использовать в Django большинство распространенных СУБД.
Для работы с базами данных в проекте Django в файле settings.py определен параметр DATABASES, который по умолчанию выглядит следующим образом:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
Переменная DATABASES содержит набор конфигураций подключений к базам данных в виде словаря. Ключи в этом словаре - названия подключений. То есть мы можем определить кучу подключений. Но как минимум одно подключение должно быть определено в переменной DATABASES - подключение с именем default, которое представляет подключение по умолчанию.
Конфигурация каждого подключения может состоять из ряда параметров. По умолчанию
указываются только два параметра. Параметр ENGINE указывает на
используемый движок для доступа к БД. В данном случае это встроенный пакет django.db.backends.sqlite3
.
Второй параметр - NAME указывает на путь к базе данных. По умолчанию база данных называется db.sqlite3. Для установки пути используется каталог из переменной BASE_DIR, которая задана в начале файла:
BASE_DIR = Path(__file__).resolve().parent.parent
По умолчанию BASE_DIR указывает на каталог, в котором находится папка проекта. И после первого запуска проекта в указанном каталоге по умолчанию будет создан файл
db.sqlite3
, который собственно и будет использоваться в качестве базы данных.
Чтобы использовать другие системы управления базами данных, необходимо будет установить соответствующий пакет.
СУБД | Пакет | Команда установки |
PostgreSQL | psycopg2 | pip install psycopg2 |
MySQL | mysql-python | pip install mysql-python |
Oracle | cx_Oracle | pip install cx_Oracle |
Это встроенные движки, но также сообщество может предоставлять свои движки к другим СУБД. Например,
компания Microsoft предоставляет пакет mssql-django для работы с MS SQL Server (устанавливается командой
pip install mssql-django
)
Выше в настройках по умолчанию применялись только два параметра: ENGINE
и NAME
. Однако при необходимости можно указать и дополнительные параметры:
ATOMIC_REQUESTS: при значении True
обертывает каждый запрос к бд в транзакцию. По умолчанию равно False
AUTOCOMMIT: при значении False
отключает систему управления транзакциями Django. По умолчанию равно True
ENGINE: движок бд. Поддерживаются следующие встроенные движки:
django.db.backends.postgresql
django.db.backends.mysql
django.db.backends.sqlite3
django.db.backends.oracle
HOST: хост базы данных
NAME: имя базы данных, для sqlite - путь к бд
CONN_MAX_AGE: время жизни подключения в секундах. Значение 0 закрывает подключение сразу после завершения каждого
запроса к бд. А значение None указывает на постоянное подключение. По умолчанию равно 0
CONN_HEALTH_CHECKS: при значении True
проверяет активность подключения, и если оно закрыто, заново устанавливает соединение.
По умолчанию равно False
OPTIONS: дополнительный набор параметров, который может потребоваться при подключении к определенных базам данных.
PASSWORD: пароль. По умолчанию равно ''
(пустая строка)
PORT: порт бд. По умолчанию равно ''
TIME_ZONE: часовой пояс. По умолчанию равно None
USER: имя пользователя. По умолчанию равно ''
TEST: набор настроек в виде словаря для теста подключения
Для разных СУБД может потребоваться разный набор параметров. Например, подключение к БД Postgres в общем случае выглядит так:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '5432', } }
При создании базы данных она еще пуста, не содержит никаких данных. Однако в консоли при запуске проекта мы можем увидеть некоторое сообщение, выделенное красным цветом:
Дело в том, что для ряда приложений, подключенных в проект по умолчанию, требуется база данных для сохранения некоторых своих данных. Так, в в файле settings.py в переменной INSTALLED_APPS по умолчанию указан ряд приложений
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # остальные приложения ...... # ................ ]
Первые четыре приложения так или иначе используют базу данных. Однако, чтобы базы данных создала нужные для этих приложений таблицы, необходимо выполнить миграции - специальные скрипты, которые изменяют стуруктуру базы данных. Для этого выполним в консоли команду
python manage.py migrate
Если после этого мы откроем базу данных db.sqlite3, которая есть в проекте, в какой-нибудь специальной программе для просмотра БД SQLite, то мы увидим, что она содержит ряд таблиц:
Для просмотра и работы с базами данных SQLite можно использовать бесплатную программу DB Browser for SQLite, которая доступна для всех основных операционных систем.
В частности, можно увидеть, что база данных содержит более десятка таблиц и индексов. Все они связанных с системой аутентификации и авторизации, администрирования и сессиями. И даже если мы непосредственно не будем использовать базу данных, но будем использовать системы аутентификации и авторизации, админитсрирования или сессии, то для нормальной работы нам все равно потребуется база данных и необходимо будет выполнить миграции.