Масштабирование или предотвращение миграций при использовании Django 2.x?

#django #python-3.x #django-migrations

#django #python-3.x #django-миграции

Вопрос:

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

Итак, мой вопрос состоит из двух частей.

  1. Не можете ли вы использовать Django 2.0 без миграций, поскольку я не думаю, что он будет хорошо масштабироваться и не будет соответствовать конвейеру CI / CD?
  2. Если мы не можем избежать миграции БД, то как мы можем интегрировать их в надежный конвейер CI / CD, где модель может быть изменена разными разработчиками из разных команд.

Комментарии:

1. Я не уверен, почему вы считаете, что миграции являются проблемой для большой команды. Конечно, при работе с несколькими ветвями возникают некоторые трудности, и этот пост может помочь. Также это помогает часто сокращать миграции (попросите кого-нибудь делать это время от времени). Но если вы используете git-flow и попросите кого-нибудь проверить слияния миграции (у вас часто будут конфликты зависимостей, где makemigrations merge потребуется), я не вижу большой проблемы.

Ответ №1:

Да, вы можете. Вы можете создавать свои таблицы вручную и настроить Django так, чтобы он не управлял вашими таблицами.

После настройки вашего проекта Django просто запустите его на своем терминале python manage.py inspectdb > models.py , и django выберет модели в настроенной базе данных. Это особенно хорошо, если ваш проект будет использовать уже существующую или устаревшую базу данных

Затем вы можете сказать django, чтобы он не управлял вашими таблицами в мета-параметрах модели:

 class MyModel(models.Model):
    # your fields here

    class Meta:
       managed = False
  

Смотрите документы здесь

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

Комментарии:

1. Использование managed = False очень затрудняет для ваших разработчиков фактический запуск модульных тестов, потому что им приходится создавать таблицы всеми setUp методами. Возможно, можно было бы установить маршрутизатор базы данных для базы данных по умолчанию с allow_migrate() возвратом False , но я не уверен.

2. Очень хорошая мысль, @dirkgroten. Я решил это, изменив managed = True мету моих моделей на setUp() . Однако это было непросто.

Ответ №2:

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

  2. Миграции предназначены для больших команд. Если вы будете избегать их, вы значительно усложните задачу для себя и своих коллег по команде.