有关模型层的介绍
MTV介绍
什么是模型?
- 模型是Python中的一个类,它是由django.db.models.Moduel派生出的一个子类
- 一个模型类就代表数据库中的一张表
- 模型类中的每一个类的属性都代表数据库中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方法和方式
ORM框架
- 定义:ORM(Object Relation Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象数据库进行操作,从而进行避免通过SQL进行操作数据库
- 作用
- 1.建立模型类和表之间的对应关系,允许我们通过对象的方式来操作数据库
- 2.根据设计的模型类生成数据库的表格
- 3.通过简单地配置就可以进行数据库的切换
- 优点
- 只需要面向对象编程,不需要面向数据编写代码
- 对数据库操作都转化为对类属性和方法的操作
- 不用编写各种数据库的SQL语句
- 实现了数据模型与数据的解耦,屏蔽了不同数据库操作上的差异,也不用关注MySQL、ORACLE…的内部细节
- 缺点
- 对于复杂业务,使用成本较高…
- 根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射的过程中有性能损失
世间万物 即无完美
ORM | DataBase |
---|---|
Class(类) | Table(数据表) |
Object(对象) | DataRow(数据行) |
Attribute(属性) | Field(字段) |
模型代码示例
该文件位于APP的models.py
from django.db import models
# Create your models here.
# 模型层入口
from django.db import models
class Detection(models.Model):
# CharField
host_name = models.CharField("HOSTNAME",max_length=50,default='')
addr = models.CharField("Addr",max_length=255)
cpu_info = models.DecimalField("CPU",max_digits=7,decimal_places=2,default=0.0)
数据库迁移
- 迁移是Django同步你对模型所做的更改(添加字段、删除模型…)到你的数据的方式.
- 生成迁移文件
python manage.py makemigrations
,生成的文件保存在应用的migrations
下 - 执行脚本迁移程序
python manage.py migrate
,会将每个应用下的migrations的文件同步回数据库
模型类-创建
代码语言:javascript复制from django.db import models
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
Django配置MySQL
MacOS用户
代码语言:javascript复制# Assume you are activating Python 3 venv
$ brew install mysql # 安装MySQL
$ pip install mysqlclient
Linux用户
请注意,这是一个基本步骤。我不能支持所有环境的完整构建步骤。如果你看到一些错误,你应该自己修复它,或者在一些用户论坛上寻求支持。不要在问题跟踪器上提交问题。
您可能需要像这样安装 Python 3 和 MySQL 开发头文件和库:
$ sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
# Debian / Ubuntu
% sudo yum install python3-devel mysql-devel
# 红帽 / CentOS
pip install mysqlclient
Win用户
在 Windows 上构建 mysqlclient 非常困难,我们使用pymysql进行代替
告诉Django用MySQL替换他的MySQLDB
- 在你项目文件夹下面的
__init__.py
- 在你APP应用下面的
__init__.py
import pymysql
pymysql.install_as_MySQLdb() # 告诉django用pymysql代替mysqldb连接数据库
代码语言:javascript复制# 将配置原封不动的写入settings.py
DATABASES = {
'default':{
'ENGINE':'django.db.backends.mysql', # 数据库引擎
'HOST':'127.0.0.1', # 地址
'PORT':'33266', # 端口
'NAME':'django', # 数据库名
'USER':'djangoapi', # 用户名
'PASSWORD':'123123123', # 密码
'OPTIONS':{
'init_command':"SET sql_mode='STRICT_TRANS_TABLES'"
},
}
}