Российский Новый Университет
Опубликован: 25.01.2016 | Доступ: свободный | Студентов: 2252 / 171 | Длительность: 16:40:00
Лекция 11:

Подключение к базе данных

Настройка системы базы данных

Django поддерживает несколько движков баз данных. Интересно, что для доступа и к любой из этих баз данных, вам требуется знать один и тот же API. Это возможно, потому что слой баз данных Django абстрагирует доступ к системе базы данных.

Мы будем познакомимся с этим позже, сейчас же вам только нужно знать, что независимо от выбранной вами базы данных, вы сможете запустить приложения Django, разработанные в этой книге (или любой другой) без изменений.

В отличие от клиент-серверных систем баз данных SQLite не требуют резидентных процессов в памяти и база данных хранится в одном файле, что делает его идеальным для нашего окружения разработки.

Вот почему мы использовали до сих пор эту базу данных на протяжении всего этого проекта.Конечно, вы можете использовать свою любимую СУБД. Мы можем указать Django, какую СУБД использовать путем редактирования файла конфигурации. Стоит также отметить, что, если вы хотите использовать MySQL, вам будет нужно установить MySQL, которая является драйвером MySQL для Python.

Установка системы базы данных в Django очень проста; все, что вам нужно сделать, это, во-первых, установить базу данных, которую вы хотите настроить, а затем добавить несколько строк конфигурации в файле settings.py и установка базы данных будет завершена.

Настройка MySQL

Мы установим и настроим MySQL связанные с ним плагины шаг за шагом в следующих разделах.

Установка MySQL в Linux - Debian

Выполните следующую команду для установки MySQL в Linux (Debian):

sudo apt-get install mysql-server 

После выполнения этой команды, вам будет предложено установить MySQL и настроить базу данных с помощью имени пользователя и пароля.

Установка плагина MySQL для Python

Для установки плагинов MySQL, которые вам требуются, используйте команду:

pip install mysql-python

Теперь откройте файл settings.py и добавьте следующие строки для соединения Django с MySQL:

DATABASES = {
'default':	{
'ENGINE':	'django.db.backends.mysql',
'NAME':	'django_db',
'USER': 'your_username',
'PASSWORD':	'your_password',
}
}

Вот и все, то, вам нужно сделать сейчас, это воссоздать все таблицы в новой базе данных, которую вы просто настроили и выполните следующую команду:

python manage.py syncdb

Вы получите исключение django.db.utils.ConnectionDoesNotExist, если не определена база данных, к которой вы пытаетесь получить доступ

Преимуществом Django является, что вы можете использовать его с несколькими базами данных одновременно. Однако вы можете задуматься, какова необходимость использовать несколько баз данных в одном проекте?

До тех пор, пока баз данных NoSQL не существовало, в большинстве случаев, одна и та же база данных часто используется для учета всех типов данных, от критически важных данных, например, данные пользователя, до дампов данных, таких как журналы; все находились в той же базе данных и системы сталкивались с проблемами во время масштабирования системы.

Для системы с несколькими базами данных может быть идеальным решением хранить реляционную информацию, например пользователей,их роль и другую учетную информацию, в базе данных SQL, такой как MySQL. Данные приложений, которые является независимыми, могут храниться в базе данных NoSQL, такой как MongoDB.

Нам необходимо определить несколько баз данных через файл конфигурации. Django необходимо указать, когда вы хотите использовать более чем одну базу данных с серверами базы данных, которые вы используете. Так, в файле settings.py, вам нужно изменить настройку DATABASE с отображением псевдонимов базы данных.

Соответствующий пример конфигурации нескольких баз данных может быть записан следующим образом:

DATABASES = {
 'default':	{
'NAME':	'app_data',
'ENGINE':	'django.db.backends.postgresql_psycopg2',
'USER':	'postgres_user',
'PASSWORD':	's3krit'
}
'users': {
'NAME':	'user_data',
'ENGINE' :	'django.db.backends.mysql',
'USER':	'mysql_user',
'PASSWORD':	'priv4te'
}
}

В предыдущем примере используется две базы данных, е MySQL и PostgreSQL с требуемыми учетными данными.

Миграция и потребность в миграции

Миграция позволяет вам обновить, изменить и удалить модели путем создания файлов миграции, которые представляют изменения модели и которые могут быть запущены на любой базе данных: разработки, тестовой или рабочей.

Схема миграции с Django имеет длительную и сложную историю; за последние несколько лет единственным выбором было стороннее приложение South. Если вы думаете о важности миграции, Django 1.7 был выпущен с встроенной поддержкой миграции.

Нам нужно знать также о сравнении миграции South и Django.Для тех, кто знаком с South, тот должен почувствовать себя в знакомой среде 'и вероятно немного чище. Для удобства в следующей таблице сравниваются процесс старого рабочего потока South и миграции нового рабочего потока Django:

Шаги South Миграция Django
Начальная миграция Запустите syncdb а затем /manage.py schemamigration <appname> --initial ./manage.py makemigrations <appname>
Миграция применения ./manage.py migrate <appname> ./manage.py migrate <appname>
Не первая миграция ./manage.py schemamigration <appname> --auto ./manage.py makemigration <appname>

Таким образом, как мы можем видеть из таблицы, что миграция Django в основном следует тому же процессу, что и South, по крайней мере для стандартного процесса миграции — это немного упрощает дело.

Новые возможности миграции Django

Новый код миграции будет улучшенной версией South, но будет основываться на той же концепции, которая заключаются в следующем:

  • Миграция на приложение
  • Автоматическое обнаружение изменений
  • Миграция данных наряду со схемами миграции

Давайте взглянем на следующий список терминов, чтобы понять преимущества миграции Django:

  • Улучшенная формат миграции: значительно улучшенный формат миграции читаемый и можно таким образом оптимизировать или проверить его без фактического исполнения
  • Перемещение: Нет необходимости держать или выполнять всю историю миграции каждый раз, тогда как возможно создавать новые первые миграции по мере развития проекта
  • Улучшено автоматическое обнаружение: Изменения новых и пользовательских полей обнаруживаются более легко, так как миграция построена в улучшенном поле API
  • Лучше обнаружение слияний: новый формат миграции будет автоматически разрешать слияние между различными ветвями VCS, которые больше не будет нужны в работе, если мы способны к слиянию изменений.

После того, как мы настроим проект и запустить приложение, ваше приложение создаст необходимые таблицы в базе данных, вы не должны делать сложные изменения моделей Django, то есть, вам не следует удалять атрибуты из класса. Однако практически, это не возможно, так как вам может потребоваться изменить ваши классы моделей соответственно. В таких случаях у нас есть решение, чтобы исправить такого рода проблемы. Этот процесс называется миграцией, и, в Django, эти миграции выполняются с помощью модуля South.

До версии Django 1.8.4, которая является последней, необходимо было отдельно устанавливать модуль South. Однако начиная с миграции версии Django 1.7, модуль South встроен в систему. Вы могли всегда делать это, например, когда вы изменили (изменения, такие как добавление новых атрибутов) ваши классы моделей, используя следующую команду:

python manage.py syncdb

В новой версии manage.py syncdb была признана устаревшей для миграции, но, если вы все еще хотите использовать старый способ, он работает.

Поддержка внутреннего интерфейса

Очень важно получить поддержку миграции для любого приложения Django, которое используется в рабочей фазе. Таким образом выбор базы данных которая изначально поддерживается модулем миграции, будет всегда лучшим решением

Некоторые из наиболее совместимых баз данных являются следующими:

  • PostgreSQL: Что касается условий миграции или схемы поддержки, PostgresSQL наиболее совместимая база данных из всех.

    Вы можете инициализировать новый столбец значением null = True, так он будет добавлен гораздо быстрее.

  • MySQL: MySQL -широко используемая база данных, так как Django поддерживает его бесшовно. Подвох в том, что здесь нет поддержки транзакций, когда операции изменения схемы, завершены, и, если операция не удалась, вам придется вручную откатить изменения. Кроме того, для каждого обновления схемы, переопределяются все таблицы, это может занять много времени, и запуск вашего приложения тоже может занять много времени.
  • SQLite: Это база данных по умолчанию, которая поставляется с Django и используется в основном для целей разработки . Таким образом она имеет мало изменения схемы поддержки, только в следующих случаях:
    • Создание новой таблицы
    • Копирование данных
    • Удаление старой таблицы
    • Переименование таблицы
Константин Боталов
Константин Боталов

Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен?

Владимир Филипенко
Владимир Филипенко

Листинг показывает в 4-ой лекции, что установлен Django 1.8.4. Тут же далее в этой лекции указаны настройки, которые воспринимает Django 1.7 и младше.