模型指的是真实世界对象的明确描述。它包含所需要的数据字段和行为。Django 遵循 DRY Principle :
Active Record 设计模式
比如这个 Person 对象,包含数据与行为,其内部定义了与数据库的交互行为。多个 Person 对象会以记录的形式,存储在数据库中。
1 定义模型
假设我们定义好了一个 app,名叫 chart。
之后,我们就可以在 chart/models.py 中,定义一个 Person 模型:
class Person(models.Model): first_name=models.CharField(max_length=30) last_name=models.CharField(max_length=30)2 安装模型
为了在工程中包含这个 app,我们需要在配置类 INSTALLED_APPS 中添加设置。因为 app 的配置类(ChartConfig)写在文件 chart/apps.py 中,所以它的点式路径就是 ‘chart.apps.ChartConfig’。在文件 chart/settings.py 中 INSTALLED_APPS 子项内添加这个点式路径:
INSTALLED_APPS = [ 'chart.apps.ChartConfig', ...]这时在项目路径下,执行以下命令:
python manage.py makemigrations chart运行结果:
Migrations for ‘chart’:chartmigrations001_initial.py– Create model Person
makemigrations 命令的语法为 python manage.py makemigrations [app],它会比对模型版本,如果需要更新,会把需要更新的部分,存储在 migrations 目录中,为创建或更新模型做好准备:
生成的 0001_initial.py 内容如下:
from django.db import migrations, modelsclass Migration(migrations.Migration): initial = True dependencies = [ ] operatiOns= [ migrations.CreateModel( name='Person', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('first_name', models.CharField(max_length=30)), ('last_name', models.CharField(max_length=30)), ], ), ]这是 Django 用于更新模型的代码。
manage.py 有一个 sqlmigrate,可用于打印模型迁移时,会执行的 SQL 语句,语法如下:
python manage.py sqlmigrate [app] [migrations 目录下,某个文件名中的编号]比如,我们想要查看刚刚建立的迁移内容:
python manage.py sqlmigrate chart 0001运行结果:
---- Create model Person--CREATE TABLE `chart_person` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `first_name` varchar(30) NOT NULL, `last_name` varchar(30) NOT NULL);3 创建或更新模型
执行 migrate 指令,创建或更新模型:
python manage.py migrate运行结果:
Running migrations:Applying chart.0001_initial… OK
可以看到 MySQL 数据库中,已经建好了 chart_person 表咯:
Django 通过在数据库中 django_migrations 表来跟踪执行这些迁移:
Django 的迁移功能,可以让我们在开发过程中,改变数据库结构而不需要重新删除和创建表,使用它,可以让数据库实现平滑升级。
创建或更新模型三部曲: