一、模型层及ORM
1.模型层定义
负责跟数据库之间进行通信
2.Django配置mysql
- 安装mysqlclient,mysqlclient版本最好在13.13以上
pip3 install mysqlclient
如果win安装报错,就去这两个网站中找
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
mysqlclient · PyPI
然后找到文件所在路径
pip3 install mysqlclient-2.1.1-cp38-cp38-win_amd64.whl
- 创建数据库
进入数据库执行
create databases 数据库名 default charset utf8
- settings.py里进行数据库的配置
修改DATABASES配置项的内容,由sqlite3变成mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "mysite1",
'USER':'root',
'PASSWORD':'123456',
'HOST':'127.0.0.1',
'PORT':'3306',
}
}
3.什么是模型
模型类需要继承自django.db.models.Model
一个模型代表数据库中的一张数据表
模型类中的属性代表数据库中的一个字段
4.ORM框架
映射图
5.数据库迁移
6.模型类创建
from django.db import models
class 模型类名(models.Model):
pass
定义属性
id 系统默认会生成
属性名 = models.类型(选项)
属性名对应 就是字段名
不要使用 python、mysql关键字
不用使用连续的下划线(__)
类型 MySQL的类型
verbose_name 主要是admin站点使用
改变表的名称
class Meta:
db_table = 'xxxx'verbose_name = '' #admin 站点使用
示例
from django.db import models
class Book(models.Model):
title = models.CharField(verbose_name='书名',max_length=50,default='')
price = models.DecimalField(verbose_name='价格',max_digits=7,decimal_places=2)
class Meta:
db_table = 'book_info'
类型
类型 | 说明 |
---|---|
AutoField | 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 |
BooleanField | 布尔字段,值为True或False |
NullBooleanField | 支持Null、True、False三种值 |
CharField | 字符串,参数max_length表示最大字符个数 |
TextField | 大文本字段,一般超过4000个字符时使用 |
IntegerField | 整数 |
DecimalField | 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数 |
FloatField | 浮点数 |
DateField | 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 |
TimeField | 时间,参数同DateField |
DateTimeField | 日期时间,参数同DateField |
FileField | 上传文件字段 |
ImageField | 继承于FileField,对上传的内容进行校验,确保是有效的图片 |
选项
选项 | 说明 |
---|---|
null | 如果为True,表示允许为空,默认值是False |
blank | 如果为True,则该字段允许为空白,默认值是False |
db_column | 字段的名称,如果未指定,则使用属性的名称 |
db_index | 若值为True, 则在表中会为此字段创建索引,默认值是False |
default | 默认 |
primary_key | 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 |
unique | 如果为True, 这个字段在表中必须有唯一值,默认值是False |
7.外键
在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:
-
CASCADE级联,删除主表数据时连通一起删除外键表中数据
-
PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
-
SET_NULL设置为NULL,仅在该字段null=True允许为null时可用
-
SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用
-
SET()设置为特定值或者调用特定方法
-
DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常
book = models.ForeignKey(BookInfo,on_delete=models.CASCADE)
二、基础字段及选项1
1.字段类型
auto_now() - 用作更新时间字段
aotu_now_add - 用作创建时间 字段
用于价格、钱相关的字段
EmailField - 用于邮箱字段
ImageField() - 图片
三、基础字段及选项2
1.字段选择项
指定创建的列的额外信息
允许出现多个字段选项,多个选项之间使用逗号隔开
null和blank区别:
null是针对数据库而言