Настройка базы данных Django
Разобравшись с идеологическими принципами, перейдем к изучению уровня доступа к базе данных в Django. Для начала нужно позаботиться о задании начальной конфигурации; мы должны сообщить Django, с какой СУБД собираемся работать и как к ней подключиться.
Предположим, что вы уже настроили сервер базы данных, запустили его и создали базу (например, командой CREATE DATABASE). При работе с SQLite никакой предварительной настройки не требуется.
Как и параметр TEMPLATE_DIRS в предыдущей главе, конфигурация базы данных задается в файле параметров Django, который по умолчанию называется settings, ру. Откройте этот файл и найдите в нем следующие параметры:
DATABASE_ENGINE = ” DATABASE_NAME = ” DATABASE_USER = ” DATABASE,PASSWORD = ” DATABASE_HOST - ” DATABASE_PORT = ”
Ниже приведены описания каждого параметра.
• Параметр DATABASE_ENGINE говорит Django, какую СУБД использовать. Он может принимать одно из значений, описанных в табл. 5.1.
Таблица 5.1. Допустимые значения параметра DATABASE ENGINE в Django
Значение |
СУБД |
Требуемый адаптер |
postgresql |
PostgreSQL |
psycopg версии 1.x, http://www.django- project.com/r/python-pgsql/1/ |
postgresql_psycopg2 |
PostgreSQL |
psycopg версии 2.x, http://www.django- project.com/r/python-pgsql/ |
mysql |
MySQL |
MySQLdb, http://www.djangoproject.eom/r/ python-mysql/ |
sqlite3 |
SQLite |
Если используется Python 2.5+, то адаптер не нужен. В противном случае - pysqlite, http://www.djangoproject.eom/r/ python-sqlite/ |
oracle |
Oracle |
cx_0racle, http://www.djangoproject.com/rl python-oracle/ |
• Отметим, что, какую бы СУБД вы ни использовали, необходимо загрузить и установить соответствующий адаптер. Все они бесплатные и имеются в Интернете, соответствующие ссылки приведены в столбце «Требуемый адаптер». Если вы работаете в Linux, то, возможно, в дистрибутиве уже имеются нужные пакеты. (Ищите пакеты, называющиеся как-то вроде python-postgresql или python- psycopg.) Например:
DATABASE_ENGINE = ‘postgresql_psycopg2’
• Параметр DATABASE_NAME сообщает Django имя вашей базы данных, например:
DATABASE_NAME = ‘mydb’
При работе с SQLite укажите полный путь к файлу базы данных, например:
DATABASE_NAME = ‘/home/django/mydata.db’
В этом примере мы разместили базу данных SQLite в каталоге /home/ django, но можно выбрать любой каталог.
• Параметр DATABASEJJSER сообщает Django имя пользователя, от имени которого устанавливается соединение с базой данных. При работе с SQLite оставьте этот параметр пустым.
• Параметр DATABASE_PASSWORD сообщает Django пароль для подключения к базе данных. При работе с SQLite или, если вы подключаетесь к серверу без пароля, оставьте этот параметр пустым.
• Параметр DATABASE_HOST сообщает Django адрес сервера базы данных. Если сервер работает на том же компьютере, где установлен Django (то есть его адрес localhost), оставьте этот параметр пустым. При работе с SQLite он также не задается.
СУБД MySQL - особый случай. Если значение этого параметра начинается с символа слеша (У) и вы работаете с MySQL, то соединение с MySQL будет устанавливаться через указанный UNIX-сокет, например:
DATABASE_HOST = ‘/var/run/mysql’
После того как вы определите эти параметры и сохраните файл settings, ру, имеет смысл протестировать конфигурацию. Для этого запустите оболочку командой python manage.ру shell, находясь в каталоге проекта mysite. (В предыдущей главе отмечалось, что в этом случае интерпретатор Python запускается с подходящими для Django настройками. В нашем случае это необходимо, потому что Django должен знать, какой файл с параметрами использовать, чтобы получить из него информацию о подключении.)
Находясь внутри оболочки, выполните следующие команды для проверки конфигурации базы данных:
»> from django.db import connection »> cursor = connection.cursor()
Если ничего не произошло, значит, база данных настроена правильно. В противном случае сообщение об ошибке должно дать информацию о том, что не так. В табл. 5.2 перечислены некоторые типичные ошибки.
Таблица 5.2. Сообщения об ошибках конфигурации базы данных
Сообщение об ошибке |
Решение |
You haven’t set the DATABASE_ENGINE setting yet. (Вы еще не задали параметр DATABASE. ENGINE) |
Параметр DATABASE_ENGINE не должен быть пустой строкой. Допустимые значения приведены в табл. 5.1. |
Environment variable DJANGO_SETTINGS_ MODULE is undefined. (He определена переменная окружения DJANGO_SETTINGS_MODULE) |
Выполните команду python manage, ру, а не просто python. |
Error loading module: No module named (Ошибка при загрузке модуля : Модуль не существует) |
Не установлен нужный адаптер базы данных (например, psycopg или MySQLdb). Адаптеры не входят в дистрибутив Django, вы должны скачать и установить их самостоятельно. |
isn’t an available database back-end. (СУБД не поддерживается) |
Значением параметра DATABASE_ ENGINE должна быть одна из перечисленных выше строк. Быть может, опечатка? |
Database does not exist (База данных не существует) |
Измените параметр DATABASE_ NAME, так чтобы он указывал на существующую базу данных, или создайте нужную базу данных командой CREATE DATABASE. |
Role does not exist (Роль не существует) |
Измените параметр DATABASE_ USER, так чтобы он указывал на существующего пользователя, или создайте нужного пользователя в своей базе данных. |
Could not connect to server (He удалось подключиться к серверу) |
Убедитесь, что параметры DATABASE_HOST и DATABASE_PORT заданы правильно, а сервер базы данных запущен. |
Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.