Теперь, когда мы разобрались с моделью MVC, давайте разберёмся с уровнем баз данных в Django. Для начала, нам потребуется выполнить некоторую начальную настройку — мы должны сказать Django, где находится сервер баз данных и как к нему подключиться.
Мы предполагаем, что у вас уже установлен и настроен сервер баз данных. Если вы используете SQLite — то этого не понадобится, так как SQLite использует файлы в файловой системе для хранения данных.
Что бы создать базу, например на сервере MySQL/MariaDB — вам необходимо выполнить что-то вроде такого:
MariaDB [(none)]> grant all privileges on django_example1.* to 'username'@'localhost' identified by 'somepassword';
Query OK, 0 rows affected (0.07 sec)
Как и параметр TEMPLATE_DIRS из предыдущей главы, по умолчанию настройки базы данных хранятся в файле настроек Django — settings.py в каталоге проекта. Откройте этот файл и найдите блок DATABASES:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Вот описание каждого параметра:
ENGINE указывает Django какой именно сервер БД будет использоваться. Что бы использовать базу данных с Django — этот параметр должен быть указан одной из строк в таблице 5-1.
Практически для любого сервера вам потребуется скачать и установить подходящий драйвер. Ве они доступны в Интернете — вы можете скачать нужный по ссылке в колонке «Required Adapter«. Если вы пользователь Linux — система управления пакетами может предложить вам другую версию драйвера (попробуйте поискать по python-postgresql или python-psycopg).
Если вы используете SQLite — укажите путь к файлу базы, например:
'NAME': '/home/django/mydata.db',
Мы используем директорию /home/django в этом примере, но вы можете использовать любую другую.
USER указывает имя пользователя для подключения к серверу баз данных. Если вы используете SQLite — оставьте поле пустым.
PASSWORD — пароль пользователя для подключения. Если вы используете SQLite — оставьте поле пустым.
HOST — адрес сервера баз данных. Если сервер БД находится на этом же хосте или вы пользуетесь SQLite — оставьте поле пустым.
В случае с MySQL есть один момент — если значение тут начинается со слеша (‘/‘) — будет выполнено подключение через Unix-сокет, например:
'HOST': '/var/run/mysql',
PORT — указывает порт сервера баз данных, к которому осуществлять подключение. Если вы пользуетесь SQLite — оставьте это поле пустым. В другом случае, если его оставить пустым — драйвер будет использовать порт по умолчанию. Как правило — это подходящее решение, и вы можете оставить его без изменений.
Когда вы добавите эти настройки и сохраните файл settings.py — будет правильным проверить подключение. Что бы сделать это — выполните python manage.py shell из директории вашего проекта (как мы уже упоминали — manage.py shell лучший способ запустить интерактивный интерпретатор Python со всеми необходимыми настройками вашего проекта Django. Это особенно важно сейчас, что бы проверить настройки подключения к базе данных).
Теперь, в консоли, выполните эти команды, что бы проверить всё ли работает:
In [1]: from django.db import connection
In [2]: cursor = connection.cursor()
Если ничего не произошло — то всё работает как надо. Иначе — интерпретатор сообщит об ошибке. В таблице 5-2 описаны наиболее часто встречающиеся.
Сообщение об ошибке
Решение
You haven’t set the ENGINE setting yet.
Не установлен параметр ENGINE. Смотрите таблицу 5-1 для корректных настроек.
Environment variable DJANGO_SETTINGS_MODULE is undefined.
Выполните python manage.py shell вместо python
Error loading _____ module: No module named _____.
У вас не установлен подходящий драйвер базы данных (например psycopg или MySQLdb). Он не устанавливается вместе с Django, и вам необходимо скачать и установить его самостоятельно.
_____ isn’t an available database backend.
Установите корректный параметр ENGINE, как описано в таблице 5-1. Возможно — у вас опечатка в имени модуля.
database _____ does not exist
База данных, указанная в NAME не существует. Создайте базу с помощью CREATE DATABASE, или укажите правильное её имя.
role _____ does not exist
Пользователь, указанный в USER не существует. Создайте его, или укажите правильное имя пользователя.
could not connect to server
Убедитесь, что параметр HOST указан верно, и что сервер баз данных запущен и работает.