模型层 - 定义
-
回顾Django MTV
-
模型层 - 负责跟数据库之间进行通信
Django配置mysql
- 安装 mysqlclient【版本 mysqlclient1.3.13以上,官网目前为1.4.x】
- 安装前确认 ubuntu 是否已安装 python3-dev 和 default-libmysqlclient-dev
- sudo apt list --installed|grep -E 'libmysqlclient-dev|python3-dev'
- 若命令无输出则需要安装 - sudo apt-get install python3-dev default-libmysqlclient-dev
- pip install mysqlclient (安装是在Pycharm中的Terminal中安装)
- 创建数据库
- 进入mysql数据库 执行
- create database 数据库名 default charset utf8;
- 通常数据库名跟项目名保持一致
- settings.py里进行数据库的配置
- 修改DATABASES配置项的内容,由 sqlite3 变为 mysql
# 在Terminal中进入mysql创建数据库: mysql -uroot -p create database mysite3 default charset utf8;
# 在 settings.py文件中78行 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite3', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306' } }
- ENGINE - 指定数据库存储引擎
'django.db.backends.mysql' 'django.db.backends.sqlite3' 'django.db.backends.oracle' 'django.db.backends.postgresql'
- NAME - 指定要连接的数据库的名称
- USER - 指定登录到数据库的用户名
- PASSWORD - 数据库的名称
- HOST/PORT - 连接具体数据库的IP和端口
什么是模型
- 模型是一个Python类,它是由Django.db.models.Model派生出的一个子类(即要求必须继承于Django.db.models.Model。继承了这个类,class就是模型)
- 一个模型类代表数据库中的一张数据表
- 模型类中每一个类属性都代表数据库中的一个字段
- 模型是数据库交互的接口,是表示和操作数据库的方法和方式
ORM框架
- 定义:ORM (Object Relational Mapping) 即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库。
- 作用:
- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
- 根据设计的模型类生成数据库中的表格。
- 通过简单的配置就可以进行数据库的切换。
- 优点:
- 只需要面向对象编程,不需要面向数据库编写代码。
- 对数据库的操作都转化成对类属性和方法的操作。
- 不用编写各种数据库的sql语句
- 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异。
- 不在关注用的是mysql、oracle...等数据库的内部细节。
- 通过简单的配置就可以轻松更换数据库,而不需要修改代码。
- 只需要面向对象编程,不需要面向数据库编写代码。
- 缺点
- 对于复杂业务,使用成本较高。
- 根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射过程中有性能损失。
- 映射图
模型类 - 创建
from django.db import models class 模型类名(models.Model): 字段名 = models.字段类型(字段选项)
模型示例
- 此示例为添加一个bookstore_book数据表来存放图书馆中书目信息
1. 添加一个bookstore的app
python manage.py startapp bookstore
2. 添加模型类并注册app
# file : bookstore/models.py from django.db import models class Book(models.Model): title = models.CharField("书名",max_length=50,default='') # CharField表示字符串类型字段 price = models.DecimalField('定价',max_digits=7,decimal_places=2,default=0.0) # DecimalField参数(最大数目的数字,存储小数位数的号码) # 即 一共7位数,小数点在从右往左第二位 00000.00,即最高为万元
# 在settings.py文件中添加: INSTALLED_APPS = [ ... 'bookstore', ]
3. 数据库迁移
- 迁移是Django同步您对模型所做更改(添加字段,删除模型等)到您的数据库模式的方式
- 生成迁移文件 - 执行 python manage.py makemigrations
将应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中 - 执行迁移脚本程序 - 执行 python manage.py migrate
执行迁移程序实现迁移。将每个应用下的migrations目录中的中间文件同步回数据库 -
此时查看数据表,发现本来的空表现在已经同步了所有的文件表到数据库,包括刚刚创建的bookstore_book表,查看所有字段,有class中的所有属性(字段):