Django之ORM简介
一 、ORM简介
1.什么是ORM
- ORM:对象关系映射(Object Relational Mapping,简称 ORM )
- ORM 相当于在业务逻辑层和数据库层之间一座桥梁。
- ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
2.使用ORM的好处:
- 提升开发效率,让不懂SQL语句的开发人员通过python面向对象的知识点也能够轻松自如的操作数据库(只需要面向对象编程,而不是面向数据库编写代码)。
- 特点:通过ORM实现使用
对象.属性
的方法来操作 - 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异,不用关注用的是mysql、oracle...等,直接可以通过简单的配置就可以轻松更换数据库,而不需要修改代码。
3.使用ORM的缺点:
- SQL封装程度太高,有时候查询速度很慢。
- 因为ORM 代码转换为 SQL 语句时,需要花费一定的时间,所以执行效率会有所降低。
3.ORM解析过程
- ORM 会将 Python 代码转成为 SQL 语句。
- SQL 语句通过 pymysql 传送到数据库服务端。
- 在数据库中执行 SQL 语句并将结果返回。
4.ORM与数据库映射关系表
Django在model里面存储了数据的重要字段和行为,并且明确了信息来源,通常一个模型(model)映射到一个数据表。
- 每个模型都是一个python类,对应一条数据表
- 一个对象对应一条记录
- 对象.属性对应一条字段
总结: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
0
二维码
海报
Django之ORM简介
一 、ORM简介
1.什么是ORM
ORM:对象关系映射(Object Relational Mapping,简称 ORM )
ORM 相当于在业务逻辑层和数据库层之间一座桥梁。
ORM 是通过使用描……

共有 0 条评论