@nurzhannogerbek

Как правильно интегрировать Django с унаследованной базой данных?

Здравствуйте! Помогите пожалуйста разобраться.

Есть база данных на Oracle c таблицей. В таблице хранятся множества данных. Необходимо создать модель данных на основе ранее упомянутой таблицы. Проблемы в следующем:

1. В данной таблице есть столбец tab c типом NUMBER. При этом precision и scale пустые.

Команда inspectdb возвращает почему-то tab = models.FloatField(), хотя вроде как FloatField не создаст тип данных NUMBER в БД. Поэтому я остановился на следующем коде:
tab = models.IntegerField(
    verbose_name='Вкладка',
    choices=TAB_CHOICES,
    default=0,
    blank=True,
    null=True
)

Данный код создает обычно тип данных NUMBER, но при этом с precision=11, scale=0. Вопрос: не возникнет ли проблемы при миграции к существующей БД (таблицей) с текущим кодом или как установить пустые значения для precision и scale?

2. В таблице есть столбец title у которой тип данных CLOB. Я планирую использовать следующий код:
title = models.TextField(
    verbose_name='Заголовок',
    blank=True,
    null=True
)

Обычно данный код создает в БД тип NCLOB. Хотя inspectdb для столбца title возвращает TextField тоже. Вопрос: Возможно ли явно указать тип в Джанго? Не возникнет ли проблемы при интеграции?

Не совсем прозрачен весь механизм интеграции для меня. Нужно ли делать миграцию после того как настроил модель данных? Просто при попытки сделать миграцию вываливается ошибка:
django.db.utils.DatabaseError: ORA-00955: name is already used by an existing object


Возможно ошибка из-за того, что в db_table, который в Meta классе, стоит название таблицы.
  • Вопрос задан
  • 1017 просмотров
Решения вопроса 1
@Sovetnikov
технический директор pulsprodaj.ru
Ошибка сообщает о том, что таблицу с указанным названием создать нельзя - она уже есть в базе.
Если коротко, то вам надо сделать manage.py migrate --fake [appname] (appname - название вашего модуля), Django пометит в БД начальную миграцию как выполненную и саму базу трогать не будет.

Но, т.к. django использует служебные таблицы, то сначала сделайте manage.py migrate django.

По п.1 и 2 - попробуйте на практике. Я так понимаю модифицировать схему через Django вы не собираетесь? Тогда просто попробуйте, что Django умеет читать и писать в вашу БД. Нагенерируйте данных https://github.com/vandersonmota/model_mommy и прочитайте их.

Ещё раз - учтите, что Django создаёт кучку служебных таблиц.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы