django orm - 模型

django 模型是数据库中的映射,也叫对象关系映射(Object Relational Mapping,简称ORM)。

一、创建模型

  • 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model

  • 模型类的每个属性都相当于一个数据库的字段。


example 1. 创建模型示例

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

first_namelast_name 是模型的 字段。每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。

说明:

  • 上面的模型会在数据库中映射一张表,表名为 _person,这说明我们可以在不同的app中创建相同名称的模型,django创建表时会根据app进行区分。

  • 虽然我们的模型中只有两个字段,但是在数据库表中会自动生成三个字段,django会自动添加一个(自动递增的) id 字段

二、使用模型

当我们创建完模型后,直接在数据库中是查找不到对应的表的,还需要进行一定的配置和操作。

1. 配置数据库

在项目的配置文件settings.py中,具有以下设置:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

这个是django的默认配置,使用sqlite3数据库,除此之外我们还可以使用mysqloracle等数据库,这里使用默认配置。

2. 设置INSTALLED_APPS

在我们的项目中可能包含很多的app,如果我们要使用app的模型model,则需要将app添加进settings.pyINSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'my_app', # 新添加的 `app` 名称
]

3. 使用python manage.py makemigrations生成迁移文件

注意:如果有以下提示,说明你执行命令所在路径不对,应该进入项目目录下,与manage.py同一级

 can't open file 'manage.py': [Errno 2] No such file or directory

正确执行该命令,则有以下提示:

Migrations for 'my_app':
  my_app/migrations/0001_initial.py
    - Create model Person

该命令在my_appmigrations目录下生成了0001_initial.py文件,点开查看:

……
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)),
            ],
        ),
    ]

该文件还没有完全转换为sql语句,但也可以看出表中有三个字段,分别为id,first_name,last_name.

注意:使用python manage.py makemigrations是对所有的app进行检查,是否有appmodel新增 / 更改。如果我们在同时开发多个app,且自己只负责某 一个 / 几个,则应该指定app名称

python manage.py makemigrations my_app

4. 使用python manage.py migrate生成 / 更改数据表

使用python manage.py migrate可以将模型model内容真正映射到数据库中。
同样的,如果我们只想对具体的app起作用。

python manage.py migrate my_app

三、模型中的字段

模型中的字段与数据库表中的字段具有映射关系,我们上述使用的CharField会在数据库中创建varchar类型字段。

django常用内置模型字段

  • AutoField 自动增长的整数型,一般用于id主键
  • BooleanField 布尔类型,可以是TrueFalse
  • NullBooleanField 可以存储布尔值数据,也可以存储空null数据
  • CharField 字符串类型
  • TextField:存储文章内容信息数据,存储比较长的文本信息
  • DateField 日期类型
  • DateTimeField 日期-时间类型
  • DurationField时间段 类型,对应pythondatetime.timedelta类型
  • EmailField 存储电子邮件格式的数据,继承了CharFieldDjango Admin以及ModelForm中提供验证机制
  • IntegerField 存储整型数据
  • GenericIPAddressField 存储IP地址信息数据
  • PositiveIntegerField 存储正整数数据
  • TimeField 存储时间信息,对应python 的 datetime.time
  • URLField:存储URL网址信息,Django Admin以及ModelForm中提供验证url
  • IPAddressField Django Admin以及ModelForm中提供验证IPV4机制

你可能感兴趣的:(django orm - 模型)