Django 1.8 - какая разница между мигрированием и makemigrations?

Согласно документации здесь: https://docs.djangoproject.com/en/1.8/topics/migrations/ говорится:

migrate, which is responsible for applying migrations, as well as unapplying and listing their status.

и

makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.

Из того, что я понимаю, я сначала делаю

makemigrations

чтобы создать файл миграции, а затем выполните

migrate

чтобы применить миграцию?

Обратите внимание, что я только начал свой проект Django, и я добавил свое приложение в свой список "installed_apps". После этого я сделал

python manage.py runserver

и он сказал

You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them.

Он ничего не упоминал о запуске makemigrations.

Ответы

Ответ 1

В соответствии с Опрос:

  • python manage.py makemigrations <app>: Создайте миграцию (сгенерируйте команды SQL).

  • python manage.py migrate: Запустите миграцию (выполните команды SQL).

Ответ 2

Как сказано в документации Django, миграции - это способ распространения изменений, которые вы вносите в свои модели (добавление поля, удаление модели и т.д.) В схему базы данных Djangos.

makemigrations в основном генерирует команды SQL для предустановленных приложений (которые можно просмотреть в установленных приложениях в файле settings.py) и модель вновь созданных приложений, которую вы добавляете в установленные приложения. Он не выполняет эти команды в вашем файле базы данных. Таким образом, таблицы не создаются после миграции.

После применения makemigrations вы можете увидеть те команды SQL с sqlmigrate, который показывает все команды SQL, которые были сгенерированы makemigrations.

migrate выполняет эти команды SQL в файле базы данных. Поэтому после выполнения миграции все таблицы установленных приложений создаются в файле базы данных.

Это можно сделать, установив браузер sqlite и открыв db.sqlite3, и вы увидите, что все таблицы появляются в файле базы данных после выполнения команды migrate.

Ответ 3

Как мы знаем, Django является ORM (Object Relational Mapping). Когда мы используем команду:

python manage.py makemigrations [имя_пользователя]

Он сгенерирует команду sql для создания таблицы, соответствующей каждому классу, который вы сделали в файле models.py. то команда:

python manage.py migrate [имя_пользователя]

создаст таблицу в базе данных, используя команды, созданные с помощью makemigrations.

Например, если мы создадим класс модели -

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

Соответствующая команда sql после использования makemigrations будет

CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);

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

Ответ 4

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

Миграция - это в основном старый syncdb, но он учитывает все миграции, сделанные makemigrations.

Ответ 5

Вы должны запустить команду -migrate- после добавления нового приложения в разделе INSTALLED APPS в файле settings.py, чтобы синхронизировать состояние базы данных с вашим текущим набором моделей. Предположим, вы уже изменили файл models.py.

Когда вы запускаете -makemigrations- он упаковывает изменения вашей модели в отдельные файлы миграции.

Обычно вы сначала запускаете makemigrations и затем мигрируете.

См. документацию по моделям Django