根据此处的文件: 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的内容。
答案 0 :(得分:25)
python manage.py makemigrations <app>
:创建迁移(生成SQL
命令)。
python manage.py migrate
:运行迁移(执行SQL
命令)。
答案 1 :(得分:9)
正如Django的documentation所说,迁移是Django将您对模型所做的更改(添加字段,删除模型等)传播到数据库模式中的方式。
makemigrations 基本上为预先安装的应用程序生成SQL命令(可以在settings.py中的已安装应用程序中查看)以及您添加的新创建的应用程序模型已安装的应用程序。它不会在数据库文件中执行这些命令。因此,在makemigrations之后不会创建表。
应用makemigrations后,您可以看到带有 sqlmigrate 的SQL命令,其中显示了makemigrations生成的所有SQL命令。
migrate 在数据库文件中执行这些SQL命令。因此,在执行迁移后,所有已安装应用程序的表都会在数据库文件中创建。
您可以通过安装sqlite browser并打开db.sqlite3来符合这一点,您可以在执行migrate命令后看到所有表都出现在数据库文件中。
答案 2 :(得分:6)
我们知道Django是ORM(对象关系映射)。当我们使用命令时:
python manage.py makemigrations [app_name]
它将生成sql命令以创建与您在models.py文件中创建的每个类相对应的表。 那么命令:
python manage.py migrate [app_name]
将使用makemigrations生成的命令在数据库中创建表。
例如,如果我们制作模型类 -
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
使用makemigrations后的相应sql命令将是
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
并使用上面的命令,当我们使用migrate时,将在数据库中创建表。
答案 3 :(得分:2)
这是django的旧手动南方迁移方式的替代品,它们可用于对模型中的更改进行编目,并写出将在数据库中发生的更改。
迁移基本上是旧的syncdb,但它考虑了makemigrations所做的所有迁移。
答案 4 :(得分:2)
您应该在settings.py文件中的INSTALLED APPS部分下添加新应用程序后运行命令-migrate-以便将数据库状态与您当前的模型集同步。假设您已经修改了models.py文件。
当您运行-makemigrations时,它会将对模型的更改打包到各个迁移文件中。
通常,您首先运行makemigrations然后迁移。
答案 5 :(得分:2)
makemigrations:创建迁移(生成SQL Command-尚未执行)
迁移:运行迁移(执行SQL命令)
但是,在您的情况下,Django要求您迁移应在首次运行服务器之前运行的DEFAULT迁移。即使没有创建第一个应用,这也将是同样的警告。
答案 6 :(得分:0)
有必要同时运行这两个命令来完成数据库表的迁移,以使其与模型同步。
makemigrations只是分析您当前的模型以查找与数据库不同步的任何更改,并创建一个可用于同步的迁移文件。如果此刻不做,您的模型仍将与数据库不同步,可能会破坏查询数据库的代码。
migrate是“做到这一点!”的命令。并应用在迁移阶段记录的更改。
答案 7 :(得分:0)
根据second tutorial of the django tutorial series。迁移是:
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.
几乎所有它要做的是: