模型层及ORM介绍
-
模型层 负责根数据库之间进行通信
-
Django配置mysql
- 按照mysqlclient【版本msqlclient 1.3.13以上】
- 安装前确认系统中是否安装了python3-dev和default-libmysqlclient-dev
sudo apt list --installed | grep -E ‘libmysqlclient-dev | python3-dev‘
- 若没安装则执行
sudo apt-get install python3-dev default -libmyqlclient-dev
sudo pip3 install mysqlclient
-
创建数据库
-
进入MySQL数据库执行
create database 数据库名default charset utf8
- 通常数据库名称和项目名称保持一致
-
settings.py中进行数据库的配置
-
修改DATABASES配置项的内容
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘,# 数据库引擎 ‘NAME‘: ‘yun_note‘, # 数据库名称 ‘HOST‘: ‘127.0.0.1‘, #连接数据库的地址 ‘PORT‘: ‘3306‘, # 连接数据库的端口 ‘USER‘: ‘root‘, # 连接数据库的用户名 ‘PASSWORD‘: ‘123456‘, # 连接数据库的密码 } }
-
-
-
创建模型类
- 模型类是python类,它是由
django.db.models.Model
派生的子类 - 一个模型类代表数据库中的一张数据表
- 模型类中每个类属性都代数据库中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方式和方法
- 模型类是python类,它是由
-
ORM 框架内
-
ORM object Relational Mapping 对象映射关系,它是一种程序技术,允许你使用类和对象的方式对数据库操作,避免通过sql语句来操作数据库
-
作用:
-
建立模型类和表之间的对应关系,通过面向对象的方式来操作数据库
-
根据设计的模型类生成数据库中的数据表
-
通过简单的配置就可以进行数据库类型切换
from django.db import models # Create your models here. class users(models.Model): username = models.CharField(‘用户名‘, max_length=30,unique=True) password = models.CharField(‘密码‘, max_length=32) active = models.BooleanField(‘是否启用‘, default=1) createTime = models.DateTimeField(‘创建时间‘,auto_now_add=True) upadateTime = models.DateTimeField(‘更新时间‘, auto_now=True) # 格式化返回对象 def __str__(self): return ‘username %s ‘%(self.username) # 数据库 迁移文件生成一个中间文件 python manage.py makemigrations # 数据库迁 将每个应用下的migrations目录的中间文件同步回数据库 python manage.py migrate 生成的数据库表名默认为`应用名_模型类小写`
-
-
ORM 基础字段及选项
-
模型类基础字段类型
- BooleanField()
- CharField()
- 必须由max_length参数值
- DateField()
- auto_now:每次保存对象时,自动设置该字段为当前时间
- auto_now_add:当第一次被创建时自动设置为当前时间
- default:设置当前时间
- ** 三个参数只能多选一 **
- DateTimeField() 同DatField()
- FloatField()
- DecimalField()
- EmailField()
- IntegerField()
- ImageField()
- TextField()
模型类字段先选项
-
primary_key 设置主键,如果指定字段主键,数据表中不会再自动创建id字段
-
blank 设置为True时字段可以为空,设置为False时,字段必须填写
-
null 设置为Treu,表示该列值允许为空,设置false时,建议添加default来设置默认值
-
default
-
db_index 设置为True,为该列增加索引
-
unique,设置为True,该字段在数据库中的值必须是唯一的(不能重复)
-
db_column 指定列明,若不指定则采用属性名为列明
-
verbose_name 设置此字段在admin界面上显示名称
-
Mete内部类 给模型赋予属性,可对模型类做一些控制
from django.db import models class Book(models.Model): title = models.CharField("书名",max_length=50,default=‘‘) class Meta: db_table = ‘book‘ # 可以改变当前模型类对应数据库的表明