Django之ORM简介

一 、ORM简介

1.什么是ORM

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

img

2.使用ORM的好处:

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

3.使用ORM的缺点:

  • SQL封装程度太高,有时候查询速度很慢。
  • 因为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

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也没有用。

查:

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

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")  # 如果用户存在,则重新返回注册界面

更多参考:菜鸟教程

版权声明:
作者:淘小欣
链接:https://blog.taoxiaoxin.club/148.html
来源:淘小欣的博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
Django之ORM简介
一 、ORM简介 1.什么是ORM ORM:对象关系映射(Object Relational Mapping,简称 ORM ) ORM 相当于在业务逻辑层和数据库层之间一座桥梁。 ORM 是通过使用描……
<<上一篇
下一篇>>