Django Book: настройка базы данных

Автор: | 02/22/2015
 

django_logo_2Предыдущая часть.

Теперь, когда мы разобрались с моделью 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

    MySQLdb,http://www.djangoproject.com/r/python-mysql/.

    django.db.backends.sqlite3

    SQLite

    No adapter needed.

    django.db.backends.oracle

    Oracle

    cx_Oracle,http://www.djangoproject.com/r/python-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: ваше первое приложение