模型(model)建好后,django可以根据这个模型(model)在数据库中创建一张数据表格。
Django自带一个数据库迁移(migration)系统来跟踪对模型(models)的修改,然后同步到数据库。
migrate命令会应用到所有在INSTALLED_APPS中的应用。
它会根据当前的模型(models)和数据库迁移(migrations)来同步数据库。
首先,创建一个数据库迁移(migration)。
在项目主目录下,执行以下命令:
python manage.py makemigrations blog
你会看到以下输出:
Migrations for 'blog':
0001_initial.py;
- Create model Post
Django在blog应用下的migrations目录中创建了一个0001——initial.py文件。
可以打开这个文件查看数据库迁移的内容。
也可以使用sqlmigrate命令查看数据库情况。
运行以下命令:
python manage.py sqlmigrate blog 0001
输出如下:
BEGIN;
CREATE TABLE
"blog_post" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"title" varchar(250) NOT NULL, "slug" varchar(250) NOT NULL, "body"
text NOT NULL, "publish" datetime NOT NULL, "created" datetime NOT
NULL, "updated" datetime NOT NULL, "status" varchar(10) NOT NULL,
"author_id" integer NOT NULL REFERENCES "auth_user"
("id"));
CREATE INDEX
"blog_post_2dbcba41" ON "blog_post" ("slug");
CREATE INDEX
"blog_post_4f331e2f" ON "blog_post" ("author_id");
COMMIT;
以上SQL语句是为SQLite数据库准备的。
Django生成的表名前缀为应用名之后跟上模型(model)的小写(blog_post),也可以通过在模型(models)的Meta类中使用db_table属性来指定表名。
Django会自动为每个模型(model)创建一个主键,也可以通过在模型(model)中的某个字段上设置primarry_key=True来指定主键。
让我们根据新模型(model)来同步数据库。
运行以下的命令来应用已存在的数据迁移(migrations):
python manage.py migrate
你应该会看到以下行跟在输出的末尾:
Applying blog.0001_initial... OK
我们刚刚为INSTALLED_APPS中所有的应用进行了数据库迁移(migrations),包括我们的blog应用。
在进行了数据库迁移(migrations)之后,数据库会反映我们模型的当前状态。
如果因为添加,删除,或是改变了存在的模型(models)中的字段,或者添加了新的模型(models)而编辑了models.py文件,都需要通过使用makemigrations命令做一次新的数据库迁移(migration)。
数据库迁移(migration)允许Django来保持对模型(model)改变的跟踪。
之后必须通过migrate命令来保持数据库与模型(models)同步。