持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情 本文已参与「新人创作礼」活动,一 起开启掘金创作之路。
模型层
用来和数据库之间进行通信,使用orm操作,类似于Django配置mybatisplus框架
Django配置Mysql
- 安装mysqlclient前需要确认系统是否安装python3-dev和default-libmysqlclient-dev
sudo apt list --installed|grep -E 'libmysqlclient-dev|python3-dev- 若命令无输出则需要安装 -
sudo apt-get install python3-dev default-libmysqlclient-dev
- 安装mysqlclient:
pip install mysqlclient - 创建数据库,进入mysql数据库执行
create database 数据库名 default charset 'utf8'- 通常数据库名与项目名保持一致
- settings.py里面进行数据库配置
- 修改
DATABASES配置项的内容,由django.db.backends.sqlite3变为django.db.backends.mysql - 具体如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'study2', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } }
- 修改
- 数据库常用操作
# mysql登录 mysql -u root -p # 创建数据库 create database 数据库名 default charset 'utf8' # 查看数据库列表 show datebases # 查看表列表 show tables # 查看表 desc 表名
ORM框架
bookstore示例
- 添加一个bookstore的app
python manage.py stratapp bookstart - 添加模型类并注册app
- 模型类代码示例
class Book(models.Model): title = models.CharField('书名', max_length=50, default='') price = models.DecimalField('价格', max_digits=7, decimal_places=2) info = models.CharField('描述', max_length=100, default='暂无描述')
- 模型类代码示例
- 数据库迁移
同步对模型的更改(添加字段、删除模型等)到数据库- 生成迁移文件 - 执行
python manage.py makemigrations
将应用下的models.py文件生成一个中间文件并保存在migrations文件夹中 - 执行迁移脚本程序 - 执行
python manage.py migrate
同步中间件至数据库
- 生成迁移文件 - 执行
模型类 - 字段
BooleanField()- 数据库类型:
tinyint(1) - 编程语言中:使用
True或False表示值 - 在数据库中:使用1或者0来表示具体的值
- 数据库类型:
CharField()- 数据库类型:
varchar - 注意:需要指定
max_length参数值
- 数据库类型:
DateField()- 数据库类型:
date - 作用:表示日期
- 参数(三选一):
auto_now:每次保存对象时,自动设置该字段为当前时间(取值:True/False)auto_now_add:对象第一次被创建时,自动设置该字段为当前时间(取值:True/False)default:设置当前时间(取值:字符串格式时间,如:'2019-6-1')
- 数据库类型:
DateTimeField()- 数据库类型:
datetime(6) - 作用:表示日期和时间
- 参数同
DateField()
- 数据库类型:
FloatField()- 数据库类型:
double
- 数据库类型:
DecimalField()- 数据库类型:
decimal(x,y) - 作用:表示小数
- 参数(三选一):
max_digits:总位数decimal_places:小数点后位数
- 数据库类型:
EmailField()- 数据库类型:
varchar - 作用:自带规则,如果格式不是邮箱格式,则抛出异常
- 数据库类型:
IntegerField()- 数据库类型:
int - 作用:正常不过的整数
- 数据库类型:
ImageField()- 数据库类型:
varchar(100) - 作用:保存图片路径
- 数据库类型:
TextField()- 数据库类型:
longtext
- 数据库类型:
EmailField()- 数据库类型:
varchar - 作用:自带规则,如果格式不是邮箱格式,则抛出异常
- 数据库类型:
模型类 - 字段选项
primary_key- 如果设置为
True,表示该列为主键,如果指定一个字段为主键,则此数据库表不会创建id字段
- 如果设置为
blank- 如果设置为
True,字段可以为空
- 如果设置为
null- 如果设置为
True,表示该列允许为空 - 默认为
False,建议加入default选项来设置默认值
- 如果设置为
default- 设置所在列的默认值
db_index- 设置为
True,为该列增加索引
- 设置为
unique- 设置为
True,则值唯一
- 设置为
db_index- 指定列的名称,默认为属性名
verbose_name- 设置此字段在admin界面显示的名称
- 样例:创建一个属性,表示用户名称,长度为30个字符串,唯一,非空,添加索引
name = model.charField(max_length=30,unique=True,null=False,db_index=True)