【django学习-13】模型定义与数据迁移

  • 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要settings.py中配置即可,不用更改models.py中的代码。当我们的web项目需要新增一张表和字段内容时,需要在models.py里面写相关内容。
  • ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换,从效果上说,它创建了一个可在编程语言中使用的“虚拟对象数据库”,在Django中,虚拟对象数据库也称为模型,通过模型实现对目标数据库的读写操作,实现方法如下:
    • 1、配置目标数据库,在setting.py中设置配置属性;
      • settings.py 文件中找到 DATABASES 配置项, django默认连接sqllite。ENGINE:是指连接数据库驱动的名称,有以下几种情况:
django.db.backends.postgresql 连接 PostgreSQL
django.db.backends.mysql 连接 mysql
django.db.backends.sqlite3 连接 sqlite
django.db.backends.oracle 连接 oracle
  • 这里我们连接mysql需要账户密码,也就是之前安装mysql的root用户名,和自己设置的密码,NAME是数据库的名称,连接配置如下:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': 'xwl',
        'HOST':'localhost',
        'PORT':'3306',
    }
}
  • **django里面无法创建数据库,数据库名称test需要手动创建,只能创建表名
  • 2、构建虚拟对象数据库,在APP的models.py文件中以类的形式定义模型;
models.py
from django.db import models

# Create your models here.

class Person(models.Model):
    name = models.CharField(max_length=64)
    age = models.IntegerField()

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "人员信息"
  • 2.1 模型Person定义了两个不同类型的字段,分别为字符类型、整型;实际开发过程中,我们需要定义不同的字段类型来满足需求,因此Django划分了多种字段类型,在源码目录\django\db\models\fields_init_.py和file.py文件中找到各种模型字段,说明如下:
  • 2.2
  • 2.3 每个模型字段都允许设置参数,这些参数来自父类Field,说明如下:
"verbose_name": None,在Admin站点管理设置字段的显示名称;
"primary_key": False,若为True,则将该字段设置为主键;
"max_length": None,最大长度;
"unique": False,若为True,则将该字段设置唯一属性;
"blank": False,若为True,则允许为空值,数据库将存储空字符串;
"null": False,若为True,则允许为空值,数据库表现为NULL;
"db_index": False,若为True,则以此字段来创建索引;
"default": NOT_PROVIDED,设置字段的默认值;
"editable": True,允许字段可编辑,用于设置Admin的新增数据的字段;
"serialize": True,允许字段序列化,可将数据转换成JSON格式;
"unique_for_date": None,设置日期字段的唯一性;
"unique_for_month": None,设置日期字段月份的唯一性;
"unique_for_year": None,设置日期字段年份的唯一性;
"choices": None,默认为空列表,设置字段的可选值;
"help_text": '',设置表单的提示信息;
"db_column": None,设置数据库字段的列名称,不设置,将字段名作为列名;
"db_tablespace": None,如果字段已创建索引,那么数据库的表空间名称将作为索引名;
"auto_created": False,若为True,则自动创建字段,用于一对一的关系模型;
"validators": [],设置字段内容的验证函数;
"error_messages": None,设置错误提示
  • 2.4 设置模型的时候,一般会重新__str__,这是设置模型的返回值,默认情况下,返回值为模型名+主键。函数__str__可用于外键查询,比如:模型A设有外键字段F,外键字段关联模型B,当查询模型A时,外键字段F会将模型B的函数__str__返回值作为字段内容;需要注意的是,函数__str__只允许返回字符类型的字段、如果是整型或日期类型,就必须使用python的str()函数将其转换成字符串。
  • 2.5 模型除了定义字段与重写__str__方法外,还有Meta选项,这三者是定义模型的基础要素,Meta选项设有19个属性,说明如下:
  • 3、通过模型在目标数据库中创建相应的数据表;
    • makemigrations和migrate
    • makemigrations 这一步执行后,会在当前app目录下生成一个migrations文件夹,该文件夹的内容就是数据库要执行的内容
      • python manage.py makemigrations
    • python manage.py migrate
      • migrate就是执行之前生成的migrations文件,这一步才是操作数据库的一步,执行完成后,数据库里面会新增一张表hello_person
  • 4、在其它模块,如视图中使用模型来实现目标数据库的读写操作。
posted @ 2022-09-12 21:06  Tony_xiao  阅读(87)  评论(0编辑  收藏  举报