Django 1.8 - в чем разница между миграцией и миграцией?
Согласно документации здесь: 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 и добавил свое приложение в свой список "instal_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.
9 ответов
Согласно учебнику по опросам:
python manage.py makemigrations <app>
: Создать миграции (генерироватьSQL
команд).python manage.py migrate
: Запустить миграцию (выполнитьSQL
команд).
В документации Django говорится, что Миграции - это способ Django распространять изменения, которые вы вносите в свои модели (добавление поля, удаление модели и т. Д.), В схему базы данных.
makemigrations в основном генерирует команды SQL для предустановленных приложений (которые можно просмотреть в установленных приложениях в settings.py) и модель вновь созданных приложений, которую вы добавляете в установленные приложения.Он не выполняет эти команды в вашем файле базы данных. Таким образом, таблицы не создаются после makemigrations.
После применения makemigrations вы можете увидеть те команды SQL с sqlmigrate, который показывает все команды SQL, которые были сгенерированы makemigrations.
Командаmigrate выполняет эти команды SQL в файле базы данных. Поэтому после выполнения миграции все таблицы установленных приложений создаются в файле базы данных.
Это можно сделать, установив браузер sqlite и открыв db.sqlite3, и вы увидите, что все таблицы появляются в файле базы данных после выполнения команды migrate.
Как мы знаем, 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
);
и используя вышеуказанную команду, таблица будет создана в базе данных, когда мы используем миграцию.
Вы должны запустить команду -migrate- после добавления нового приложения в разделе INSTALLED APPS в файле settings.py, чтобы синхронизировать состояние базы данных с вашим текущим набором моделей. Предполагая, что вы уже изменили файл models.py.
Когда вы запускаете -makemigrations-, он упаковывает изменения вашей модели в отдельные файлы миграции.
Обычно вы сначала запускаете makemigrations, а затем мигрируете.
Необходимо выполнить обе команды, чтобы завершить миграцию таблиц базы данных для синхронизации с вашими моделями.
makemigrations просто анализирует ваши текущие модели на предмет любых изменений, которые могут быть не синхронизированы с вашей базой данных, и создает файл миграции, который можно использовать для синхронизации. Если оставить это на этом этапе, ваши модели по-прежнему будут не синхронизированы с вашей базой данных, что может привести к нарушению вашего кода, который запрашивает базу данных.
migrate - это команда "Сделать так!" и примените изменения, отмеченные на этапе makemigrations.
Это замена django старого ручного способа переноса на юг, его можно использовать для внесения в каталог изменений в ваших моделях и записи изменений, которые будут иметь место в БД.
Миграция - это, по сути, старый syncdb, но он учитывает все миграции, сделанные makemigrations.
Makemigrations : создает миграции (генерирует команду SQL - еще не выполнена)
migrate: запустить миграции (выполняет команду SQL)
Но в вашем случае Django просит вас перенести миграции DEFAULT, которые должны выполняться перед первым запуском сервера. Это было бы такое же предупреждение, даже если бы не создавалось первое приложение.
Согласно второму руководству из серии руководств по 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.
Практически все, что он делает:
- Когда вы выполняете команду make migrations, вы сохраняете "инструкции" в mysql.
- Когда вы выполняете команду migrate, вы выполняете те же инструкции