Ответ 1
В соответствии с Опрос:
-
python manage.py makemigrations <app>
: Создайте миграцию (сгенерируйте командыSQL
). -
python manage.py migrate
: Запустите миграцию (выполните командыSQL
).
Согласно документации здесь: 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.
В соответствии с Опрос:
python manage.py makemigrations <app>
: Создайте миграцию (сгенерируйте команды SQL
).
python manage.py migrate
: Запустите миграцию (выполните команды SQL
).
Как сказано в документации Django, миграции - это способ распространения изменений, которые вы вносите в свои модели (добавление поля, удаление модели и т.д.) В схему базы данных Djangos.
makemigrations в основном генерирует команды SQL для предустановленных приложений (которые можно просмотреть в установленных приложениях в файле settings.py) и модель вновь созданных приложений, которую вы добавляете в установленные приложения. Он не выполняет эти команды в вашем файле базы данных. Таким образом, таблицы не создаются после миграции.
После применения 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
);
и используя команду выше, таблица будет создана в базе данных при использовании переноса.
Это замена django для старого ручного южного способа миграции, его можно использовать для изменения каталогов изменений в ваших моделях и записи изменений, которые будут выполняться в db.
Миграция - это в основном старый syncdb, но он учитывает все миграции, сделанные makemigrations.
Вы должны запустить команду -migrate- после добавления нового приложения в разделе INSTALLED APPS в файле settings.py, чтобы синхронизировать состояние базы данных с вашим текущим набором моделей. Предположим, вы уже изменили файл models.py.
Когда вы запускаете -makemigrations- он упаковывает изменения вашей модели в отдельные файлы миграции.
Обычно вы сначала запускаете makemigrations и затем мигрируете.