说说 Python Django 模型的创建流程

模型指的是真实世界对象的明确描述。它包含所需要的数据字段和行为。Django 遵循 DRY Principle :

  1. 明确优于隐式 - 行为基于关键字参数,并且在某些情况下,基于字段的类型。
  2. 包括所有相关领域逻辑 - 模型应该封装一个“对象”的各个方面,遵循 Martin Fowler 的 Active Record 设计模式,所有可用于理解该模型的信息都应该存储在该模型中。

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’:
chart\migrations\0001_initial.py
- Create model Person

makemigrations 命令的语法为 python manage.py makemigrations [app],它会比对模型版本,如果需要更新,会把需要更新的部分,存储在 migrations 目录中,为创建或更新模型做好准备:

生成的 0001_initial.py 内容如下:

from django.db import migrations, models


class 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);
  1. 运行结果与我们所使用的数据库有关,上面的示例使用的是 MySQL。
  2. 数据库的表名是由 app 名(chart)和模型名的小写形式( people)使用下划线连接而来,可自定义。
  3. 会自动创建主键,可自定义。
  4. 外键字段名后会追加字符串 “_id” ,可自定义。

3 创建或更新模型

执行 migrate 指令,创建或更新模型:

python manage.py migrate

运行结果:

Running migrations:
Applying chart.0001_initial… OK

可以看到 MySQL 数据库中,已经建好了 chart_person 表咯:

Django 通过在数据库中 django_migrations 表来跟踪执行这些迁移:

Django 的迁移功能,可以让我们在开发过程中,改变数据库结构而不需要重新删除和创建表,使用它,可以让数据库实现平滑升级。


创建或更新模型三部曲:

  1. 在 app 的 models.py 文件,定义模型。
  2. 在 [app]/settings.py 中 INSTALLED_APPS 子项内,注册 app。(如果已注册,可跳过该步骤)
  3. 运行 python manage.py makemigrations [app] 把变化的模型生成相应的迁移文件。
  4. 运行 python manage.py migrate 更新数据库。
发布了612 篇原创文章 · 获赞 687 · 访问量 90万+

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/104080628