美文网首页
django orm - 模型

django orm - 模型

作者: eeert2 | 来源:发表于2020-03-05 12:16 被阅读0次

    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 是模型的 字段。每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。

    说明:

    • 上面的模型会在数据库中映射一张表,表名为 <appname>_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 - 模型

          本文链接:https://www.haomeiwen.com/subject/okctrhtx.html