Интеграция Django с унаследованной базой данных

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

Этот документ предполагает, что вы знакомы с основами Django, которые описаны в учебнике.

После настройки Django следуйте стандартному процессу для интеграции с существующей базой данных.

Предоставьте Django параметры вашей базы данных

Вам потребуется указать параметры соединения с вашей базой данных и её имя. Делается это редактированием параметра DATABASES, указав значения для следующих ключей соединения 'default':

Автоматическая генерация моделей

Django представляет утилиту inspectdb, которая может создавать модели по существующей базе данных. Вы можете посмотреть результат, запустив следующую команду:

$ python manage.py inspectdb

Сохраните его в файл, используя стандартный механизм перенаправления Unix:

$ python manage.py inspectdb > models.py

Такой подход является вспомогательными. Обратитесь к документации на inspectdb для подробностей.

После приведения моделей в нормальный вид, сохраните их в файле models.py, разместив его в пакете, который хранит ваше приложение. Затем добавьте ваше приложение в INSTALLED_APPS.

Если вы планируете изменение данных вашим приложением (т.е. редактирование, удаление и создание записей) в существующих таблицах базы данных, та вам следует вручную проверить и отредактировать описания моделей в файле models.py, указав managed. Например, рассмотрим сгенерированные модели:

class Person(models.Model):
    id = models.IntegerField(primary_key=True)
    first_name = models.CharField(max_length=70)
    class Meta:
        managed = False
       db_table = 'CENSUS_PERSONS'

Если требуется изменять существующие данные в таблице CENSUS_PERSONS с помощью Django, то вам потребуется назначить описанной выше опции managed значение True (или просто удалить её, так как она по умолчанию равна True).

Это является индикатором того, что Django имеет доступ на запись к вашим данным на базе моделей.

Changed in Django 1.6:

The behavior by which introspected models are created as unmanaged ones is new in Django 1.6.

Установка основных таблиц Django

Теперь, запустите команду syncdb для установки в базу данных стандартных компонентов Django, таких как права пользователей и типы контента:

$ python manage.py syncdb

Тестирование и настройка

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