Предыдущая часть.
Теперь, когда мы разобрались с моделью MVC, давайте разберёмся с уровнем баз данных в Django. Для начала, нам потребуется выполнить некоторую начальную настройку — мы должны сказать Django, где находится сервер баз данных и как к нему подключиться.
Мы предполагаем, что у вас уже установлен и настроен сервер баз данных. Если вы используете SQLite — то этого не понадобится, так как SQLite использует файлы в файловой системе для хранения данных.
Что бы создать базу, например на сервере MySQL/MariaDB — вам необходимо выполнить что-то вроде такого:
$ mysql -u root -p Enter password:
MariaDB [(none)]> create database django_example1; Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> grant all privileges on django_example1.* to 'username'@'localhost' identified by 'somepassword'; Query OK, 0 rows affected (0.07 sec)
Примечание: работа в Python с MySQL описана в статье Python: работа с MySQL с использованием MySQLdb.
Как и параметр 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.Table 5-1. Database Engine Settings Setting
Database
Required Adapter
django.db.backends.postgresql_psycopg2
PostgreSQL
psycopg version 2.x,http://www.djangoproject.com/r/python-pgsql/.
django.db.backends.mysql
MySQL
django.db.backends.sqlite3
SQLite
No adapter needed.
django.db.backends.oracle
Oracle
Практически для любого сервера вам потребуется скачать и установить подходящий драйвер. Ве они доступны в Интернете — вы можете скачать нужный по ссылке в колонке «Required Adapter«. Если вы пользователь Linux — система управления пакетами может предложить вам другую версию драйвера (попробуйте поискать по
python-postgresql
илиpython-psycopg
).Пример:
'ENGINE': 'django.db.backends.postgresql_psycopg2',
-
NAME
указывает имя базы данных, например:'NAME': 'mydb',
Если вы используете 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 указан верно, и что сервер баз данных запущен и работает. |
Продолжение — Django Book: ваше первое приложение