django - 模型层及ORM介绍

模型层 - 定义

django - 模型层及ORM介绍

  • 回顾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语句,根据查询的结果转化成对象,在映射过程中有性能损失。
  • 映射图 

django - 模型层及ORM介绍

 

 

 

模型类 - 创建

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目录中的中间文件同步回数据库 
    • django - 模型层及ORM介绍

此时查看数据表,发现本来的空表现在已经同步了所有的文件表到数据库,包括刚刚创建的bookstore_book表,查看所有字段,有class中的所有属性(字段):

django - 模型层及ORM介绍

 

上一篇:django models对象转换为json的方法


下一篇:django模型 数据库设计学习