Учитывая вышеописанную философию, начнём исследовать слой Django для работы с базой данных. Первое, что нам понадобится — необходимо позаботиться о начальной настройке. Необходимо указать Django какой сервер базы данных использовать и как к нему подключаться.
Используем кодировку UTF-8, пример для MySQL (прим. переводчика)
Откроем на редактирование файл
/etc/mysql/my.cnf
.
В конец секции [client] добавим строчку:
default-character-set=utf8
В конец секции [mysqld] добавим строчки:
default-character-set=utf8
collation_server=utf8_unicode_ci
Теперь следует перезапустить сервер базы данных и можно приступать к созданию самой базы.
Проверка настроек кодировки (прим. переводчика)
В результате вышеописанных действий вы должны получить:
mysql> show variables like 'coll%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
Мы предполагаем, что вы уже установили сервер базы данных, запустили его и создали базу данных внутри. Пример для MySQL:
CREATE USER user@localhost IDENTIFIED BY "topsecret";
CREATE DATABASE mysite;
GRANT ALL ON mysite.* TO user@localhost;
Использование SQLite является особым случаем: не требуется создавать базу данных, так как SQLite использует файлы на файловой системе для хранения своих данных.
Подобно параметру TEMPLATE_DIRS
из предыдущей
главы, по умолчанию параметры соединения с базами данных
определяются в файле конфигурации проекта,
settings.py
, опцией DATABASES
,
которая по-умолчанию равна {}. База default
должна быть определена обязательно. Так же словарь может определять любое
количество других баз данных. Самый простой вариант, это использование одной
базы данных SQLite:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mydatabase'
}
}
Для других баз данных необходимо больше параметров. Рассмотрим каждый параметр.
Параметр
ENGINE
указывает тип базы данных. Может быть одним из показанных в таблице «Настройки драйвера базы данных».Таблица 5.1. Настройки драйвера базы данных
Значение База данных Драйвер django.db.backends.postgresql PostgreSQL psycopg версия 1.х, http://www.djangoproject.com/r/python-pgsql/1/ django.db.backends.postgresql_psycopg2 PostgreSQL psycopg версия 2.х, 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 При использовании Python 2.5+ драйвер не нужен. В противном случае http://www.djangoproject.com/r/python-sqlite/ django.db.backends.oracle Oracle cx_Oracle, http://www.djangoproject.com/r/python-oracle/
Следует отметить, что для работы с базой данных потребуется скачать и установить соответствующий драйвер. Каждый описанный драйвер доступен бесплатно, просто проследуйте по ссылке, которая приведена в колонке «Драйвер». Если вы используете Linux, вероятно ваша система управления пакетами может предложить соответствующие пакеты. (Например, ищите пакеты с именами python-postgresql или python-psycopg.)
Параметр
NAME
указывает Django имя вашей базы данных. Например:'NAME': 'mydb'
Если вы использует SQLite, укажите полный путь к файлу базы данных на файловой системе. Например:
'NAME': '/home/django/mydata.db'
Мы используем каталог
/home/django
в этом примере, но вам следует выбирать каталог, который более подходит для вашей задачи.Параметр
USER
указывает Django какое имя надо использовать при соединении с базой данных. Если вы используете SQLite, оставьте этот параметр пустым.Параметр
PASSWORD
указывает Django какой пароль надо использовать при соединении с базой данных. Если вы используете SQLite, оставьте этот параметр пустым.Параметр
HOST
указывает Django какое имя сервера надо использовать при соединении с базой данных. Если база данных находится на том же компьютере (т.е., localhost), оставьте параметр пустым. Если вы используете SQLite, оставьте этот параметр пустым.MySQL является особым случаем. Если значение этого параметра начинается с прямого слэша (/) и вы используете MySQL, то соединение будет произведено через UNIX сокет, например:
DATABASE_HOST = '/var/run/mysql'
(Прим. переводчика) Скопировано из прошлой версии книги, так как не потеряло актуальность.
Параметр
PORT
указывает Django какой порт надо использовать при соединении с базой данных. Если вы используете SQLite, оставьте этот параметр пустым. В противном случае, соответствующий драйвер базы данных будет использовать стандартный (для конкретной базы данных) порт. В большинстве случаев используется стандартный порт, можете оставить этот параметр пустым.
После заполнения этих параметров, проверьте свою
конфигурацию. Чтобы выполнить это, запустите python manage.py shell, как делали это в прошлой главе, в
каталоге проекта mysite
. (Как мы
рассказывали в прошлой главе команда manage.py shell является способом запуска интерпретатора Python
с корректной конфигурацией Django проекта. Это необходимо в
нашем случае, так как Django должна знать какой файл
конфигурации следует использовать для получения учётных данных
для работы с базой данных.)
В интерпретаторе выполните нижеприведённые команды для проверки ваших настроек для соединения с базой данных:
>>> from django.db import connection
>>> cursor = connection.cursor()
Если ничего не произойдёт, значит всё сделано правильно. В противном случае, изучите сообщение об ошибке и выясните, что произошло. Таблица «Сообщения об ошибках в конфигурации доступа к базе данных» содержит некоторые стандартные ошибки.
Таблица 5.2. Сообщения об ошибках в конфигурации доступа к базе данных
Сообщение об ошибке | Решение |
---|---|
Вы не определили значение параметра
ENGINE . (You haven't set
the ENGINE setting yet.)
|
Установите значение параметра
ENGINE . Не оставляйте его
пустым.
|
Не определена переменная среды
DJANGO_SETTINGS_MODULE . (Environment
variable DJANGO_SETTINGS_MODULE is undefined.)
| Запустите команду python manage.py shell вместо python. |
Ошибка при загрузке модуля _____. Нет модуля с именем _____. (Error loading _____ module: No module named _____.) | Вы не установили соответствующий драйвер базы данных, т.е. psycopg или MySQLdb. |
_____ не является доступным драйвером базы данных. (_____ isn't an available database backend. |
Установите параметр
ENGINE , указав
используемую базу данных, как было описано
ранее. Возможно вы опечатались?
|
База данных _____ не существует. (database _____ does not exist.) |
Измените параметр NAME , чтобы
он указывал на существующую базу данных, или выполните
соответствующую команду CREATE DATABASE
для создания базы данных.
|
Роль _____ не существует. (role _____ does not exist.) |
Измените параметр USER ,
чтобы он указывал на существующего пользователя или
создайте соответствующего пользователя в базе данных.
|
Не могу подключиться к серверу. (could not connect to server.) |
Удостоверьтесь, что параметры
HOST и
PORT установлены
правильно, а также, что сервер баз данных работает.
|
Пред. | Уровень выше | След. |
Методика MTV (или MVC) | Начало | Ваше первое приложение |
4 comments | Make a comment
Довольно долго пытался настроить mySql под WinXP, установенный в наборе xmpp, итог:
править нужно my.ini (путь по умолчанию C:\xampp\mysql\bin);
правки следующие -
[client]
default-character-set = utf8
[mysqld]
init_connect = 'SET collation_connection=utf8_general_ci;SET collation_database=utf8_unicode_ci;SET collation_server=utf8_unicode_ci;SET NAMES utf8'
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
Выше приведенные действия дают в итоге те самые настройки кодировки, которые указаны в начале статьи.
не парься, поставь unix, хотя бы на виртуалку... и то лучше...
собраннsq mysql-python для win: http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
ubuntu 12.04, mysql-server-5.5 с указанными настройками:
"В конец секции [client] добавим строчку:
default-character-set=utf8
В конец секции [mysqld] добавим строчки:
default-character-set=utf8
collation_server=utf8_unicode_ci
" не может перезапустить mysql-server, должно быть character_set_server = ut8 вместо последнего default_character_set.
In according to http://askubuntu.com/a/129143/80077