Django 1.8 — в чем разница между migrate и makemigrations?


person SilentDev    schedule 01.05.2015    source источник
comment
Фреймворку django требуется несколько таблиц базы данных, например: session, content_type, site, для которых уже созданы миграции. Вы видите сообщение о том, что эти миграции по умолчанию еще не применены. Таким образом, вы должны выполнить миграцию перед первым запуском сервера.   -  person karthikr    schedule 01.05.2015
comment
@karthikr О, хорошо. Итак, в моей ситуации, поскольку я добавил свое приложение в Install_Apps еще до выполнения первоначальной миграции, означает ли это, что теперь я должен сначала запустить makemigration, а затем выполнить миграцию?   -  person SilentDev    schedule 01.05.2015
comment
Да. Именно тогда создаются миграции для вашего приложения. Следующим шагом является применение созданных миграций.   -  person karthikr    schedule 01.05.2015


Ответы (8)


Согласно руководству по опросам:

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

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

person Hakim    schedule 25.12.2016

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

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

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

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

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

person Rajat Bhatt    schedule 14.12.2017

Как мы знаем, Django — это ORM (реляционное сопоставление объектов). Когда мы используем команду:

python manage.py makemigrations [имя_приложения]

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

python manage.py миграция [имя_приложения]

создаст таблицу в базе данных, используя команды, сгенерированные 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
);

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

person bSr    schedule 19.01.2018

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

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

migrate — это команда «Сделай так!» и примените изменения, отмеченные на этапе makemigrations.

Источник

person Toms Codery    schedule 28.12.2019

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

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

person Mikeec3    schedule 01.05.2015

Вы должны запустить команду -migrate- после добавления нового приложения в разделе УСТАНОВЛЕННЫЕ ПРИЛОЖЕНИЯ в файле settings.py, чтобы синхронизировать состояние базы данных с вашим текущим набором моделей. Предполагая, что вы уже изменили файл models.py.

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

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

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

person deadcandance72    schedule 08.09.2015

makemigrations: создает миграции (генерация команды SQL — еще не выполнена)

migrate: запустить миграцию (выполняет команду SQL)

Но в вашем случае Django просит вас перенести миграции ПО УМОЛЧАНИЮ, которые должны выполняться до первого запуска сервера. Это было бы то же самое предупреждение даже без создания первого приложения.

person ghimirehillson    schedule 03.05.2020

Согласно второму руководству из серии руководств по django. Миграции это:

The migrate command takes all the migrations that haven’t been applied (Django tracks which ones are applied using a special table in your database called django_migrations) and runs them against your database - essentially, synchronizing the changes you made to your models with the schema in the database.

Так что почти все, что он делает, это:

  1. Когда вы выполняете команду make migrates, вы сохраняете «инструкции» в mysql.
  2. Когда вы выполняете команду migrate, вы выполняете те же самые инструкции
person Dr4kk0nnys    schedule 23.10.2020