搜索
简帛阁>技术文章>Django之ORM简介

Django之ORM简介

读万卷书,行万里路。——刘彝

文章目录

  • Django之ORM简介
    • 一、MVC与MTV模型
      • 1.MVC模型
      • 2. MTV模型
        • Django模型
    • 二 、ORM简介
      • 1.什么是ORM
      • 2.使用ORM的好处:
      • 3.使用ORM的缺点:
      • 3.ORM解析过程
      • 4.ORM与数据库映射关系表
    • 三、ORM基本使用与实操
      • 1.创建表
      • 2.数据库迁移命令
      • 4.针对主键字段说明
      • 4.字段的增删改查
            • 总结:
      • 5.数据的增删改查
    • 四、编写登入验证页面
      • 1.需求
      • 2.代码
      • 3.注册功能


Django之ORM简介


一、MVC与MTV模型

1.MVC模型

  • Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器©和视图(V)三层

  • 他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:

image-20200924175052910

2. MTV模型

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

  • M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
  • T 代表模板 (Template):负责如何把页面展示给用户(html)。
  • V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。

除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:

1

一般是用户通过浏览器向服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

Django模型

Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。

Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。

MySQL 是 Web 应用中最常用的数据库。

二 、ORM简介

1.什么是ORM

  • ORM:对象关系映射(Object Relational Mapping,简称 ORM )
  • ORM 相当于在业务逻辑层和数据库层之间一座桥梁。
  • ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

img

2.使用ORM的好处:

  • 提升开发效率,让不懂SQL语句的开发人员通过python面向对象的知识点也能够轻松自如的操作数据库(只需要面向对象编程,而不是面向数据库编写代码)。
    • 特点:通过ORM实现使用对象.属性的方法来操作
  • 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异,不用关注用的是mysql、oracle…等,直接可以通过简单的配置就可以轻松更换数据库,而不需要修改代码。

3.使用ORM的缺点:

  • SQL封装程度太高,有时候查询速度很慢。
  • y因为ORM 代码转换为 SQL 语句时,需要花费一定的时间,所以执行效率会有所降低。

3.ORM解析过程

  1. ORM 会将 Python 代码转成为 SQL 语句。
  2. SQL 语句通过 pymysql 传送到数据库服务端。
  3. 在数据库中执行 SQL 语句并将结果返回。

4.ORM与数据库映射关系表

Django在model里面存储了数据的重要字段和行为,并且明确了信息来源,通常一个模型(model)映射到一个数据表。

  • 每个模型都是一个python类,对应一条数据表
  • 一个对象对应一条记录
  • 对象.属性对应一条字段

img

**总结:**Django为用户提供了一个自动生成数据库访问的API

三、ORM基本使用与实操

1.创建表

  • 我们的模型类需要写在应用下的models.py文件中
from django.db import models


# Create your models here.
class User(models.Model):
    '''
    CharField 类型必须设置 max_length 参数
    verbose_name 是对字段的注释,每个字段都有,且是第一个默认形参,所以可以直接在第一个位置
    null = True 允许字段为空
    default =0 设置默认值
    '''
    # id int primary key auto_increment;(sql语句效果与下面的ORM语句相同)
    id = models.AutoField(primary_key=True,verbose_name="主键ID")
    # name varchar(32);
    name = models.CharField(max_length=32,verbose_name='名字')
    # age int
    age = models.IntegerField(verbose_name="年龄")
    # pwd int
    pwd = models.IntegerField('密码',null=True)	
    is_delete = models.IntegerField(default=0)

2.数据库迁移命令

以下两条命令叫数据库迁移命令, 就比如上面我们创建了一个模型类, 于是我们就要进行这两条命令

1.生成数据库同步脚本,将数据库修改操作先记录下来(对应应用下的 migrations 文件夹)
python3 manage.py makemigrations

2.真正的数据库迁移
python3 manage.py migrate

注意:只要动了models.py中跟数据库相关的代码就必须重新执行上述两条命令

image-20210321215926903

在margrations 文件夹下生成的了一个文件

image-20210321220234674

再来查看数据表已经生成了表.

image-20210321220901524

4.针对主键字段说明

  • 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
  • 如果你想让主键字段名不叫id 叫uid、sid、pid等则需要自己手动指定
class User1(models.Model):
    # 由于一张表中必须要有一个主键字段,并且一般情况下都叫id字段
    # 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
    # 如果你想让主键字段名不叫id 叫uid、sid、pid等则需要自己手动指定
	username = models.CharField(max_length=32)

4.字段的增删改查

增:

# 增
1.可以直接终端内给出默认值
2.该字段可以为空
pwd = models.IntegerField('密码',null=True)  # 该字段可以为空
3.直接给字段设置默认值
is_delete = models.IntegerField(default=0)  # 默认值

改:

  • 直接改代码然后执行数据库迁移命令即可

删(需谨慎):

  • 注释掉对应的字段代码然后执行数据库迁移命令即可
  • 执行完毕之后字段对应的数据也就没有了,Ctrl+Z也没有用。

查:

  • 你用眼睛就可以看到,可以鼠标点点点
总结:

在操作models.py文件的时候一定要细心,千万别手抖,千万不要注释有段字段,在执行迁移命令之前最好检查一下自己的代码。

个人建议:当你离开你的计算机之后一定要锁屏,否则你离开的时候别人给你来个删库操作,你就要…

5.数据的增删改查

增加数据:

# 假设获取到用户传入的数据
username = "shawn"
userpwd = 123
userage = 23

# insert into Student(name,age,pwd) values(username,userpwd,age);

# 方式一 : 
user_obj.models.Student.objects.create(name=username,pwd=passwd,age=userage)
# 方式二 : 
user_obj = models.Student(name=username,pwd=passwd,age=userage)
user_obj.save()

查询数据:

# select * from Student where name=usernamr

# 方式一 : 
user_obj = models.User.objects.filter(name=username)[0]
# 方式二 : 
user_obj = models.User.objects.filter(name=username).first()
# 推荐使用.first(). 但是其内部使用的也是通过索引取值

查询所有数据:

# select * from Student;

# 方式一 : 
user_obj = models.User.objects.filter()
# 方式二 : 
user_obj = models.User.objects.all()  # [obj1,obj2,obj3]

修改数据:

# 方式一 :
models.Student.objects.filter(id=edit_id).update(name=username,pwd=password)

# 方式二 : 
edit_obj = models.Student.objects.filter(id=edit_id).first()
edit_obj.name = username
edit_obj.pwd = password
edit_obj.save()

删除数据:

# 直接删除
models.Student.objects.filter(id=edit_id).delete()

# 公司里删除数据并不会真正的删除, 而是在数据后面加一个字段来标志该数据有没有被删除
# 例如用 isdelete 字段来标识, 如果 isdelete=0 则未删除,如果 isdelete=1 则表示删除

四、编写登入验证页面

1.需求

  • 从数据库中读取数据, 然后对用户身份进行校验
  • 校验成功返回字符串"登入成功"
  • 校验失败再次返回用户登入页面

2.代码

  • views.py 文件
from django.shortcuts import render,HttpResponse,redirect

def login_func(request):
    from books import models  # 导入数模型类文件
    username = request.POST.get('username')  # 获取用户输入的用户名
    userpwd = request.POST.get('userpwd')    # 获取用户输入的密码

    if request.method == 'POST':
        # 拿到匹配的数据对象, 如果匹配不到则返回 None
        user_obj = models.Student.objects.filter(name=username,pwd=userpwd).first()  
        if user_obj:
            print(user_obj.name,user_obj.pwd,user_obj.age,)  # 可以打印信息查看一下
            return HttpResponse(f'欢迎{user_obj.name}小可爱')
    return render(request,'login.html')  # 匹配不到重新返回登入界面

3.注册功能

  • 注册信息添加到数据库
  • views.py 文件
from django.shortcuts import render,HttpResponse,redirect

def register_func(request):
    from books import models
    username = request.POST.get('username')
    userpwd = request.POST.get('userpwd')
    userage = request.POST.get('userage')
    
    if request.method == 'POST':
        user_obj = models.Student.objects.filter(name=username).first()  # 判断是否存在该用户
        if not user_obj:
            user_obj = models.Student(name=username, pwd=userpwd, age=userage)  
            user_obj.save()  # 进行用户数据添加并保存
            return HttpResponse(f'{user_obj.name}小可爱注册成功')
    return render(request, "register.html")  # 如果用户存在,则重新返回注册界面

更多参考:菜鸟教程

读万卷书,行万里路。——刘彝文章目录DjangoORM简介一、MVC与MTV模型1MVC模型2MTV模型Django模型二、ORM简介1什么是ORM2使用ORM的好处:3使用ORM的缺点:3ORM解
该命令危险系数高rm(英文全称:remove)命令用于删除一个文件或者目录。语法rm[options]name参数i删除前逐一询问确认。f即使原文件或者目录的属性为只读,亦直接删除,无需逐一确认。r将
Django框架简介MVC框架和MTV框架MVC,全名是ModelViewController,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器
MVC与MTV模型MVCWeb服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象
pythonIO多路复用一、多路复用概念:监听多个描述符(文件描述符(windows下暂不支持)、网络描述符)的状态,如果描述符状态改变则会被内核修改标志位,进而被进程获取进而进行读写操作二、多路复用
本文内容来书籍《Netty4核心原理与手写RPC框架实战》1什么是I/O我们都知道在UNIX世界里一切皆文件,而文件是什么呢?文件就是一串二进制流而已,其实不管是Socket,还是FIFO(Firs
django请求生命周期流程图(必会)web服务网关接口1django自带的是wsgiref请求来的时候解析封装响应走的时候打包处理2django自带的wsgiref模块本身能够支持的并发量很小最多
Django特性ORM。models层建立数据类与数据库中数据形成ORM映射关系MTV架构。与MVC架构有小小的区别,controller的功能被分化在了urldispatcher(urlspy文件)
一djangoORM简介1什么是ORMORM:全称objectrelationalmapping,对象关系映射功能:通过orm实现使用操作对象的方式来操作数据库中的数据目的:就是为了能够让不懂SQL语
1删除文件gitrmfiletxt2忽略跟踪的文件,不删除本地文件忽略已跟踪的文件gitrmcachedfiletxt忽略已跟踪的文件夹gitrmrcacheddirectory