【银角大王——Django课程——ORM】

Django课程——ORM框架

    • Django 模型使用自带的 ORM
    • ORM 解析过程:
    • ORM 对应关系表:
    • 下载mysqlclient安装包
    • 创建数据库——ORM只能操作表,无法创建数据库。
    • 连接数据库——修改settings中的DATABASES
    • Django操作表,在models.py文件中编写——
    • 操作表(大前提app一定要已经注册)
    • 修改表中的列
    • 操作数据表中的数据
    • 案例——用户管理
      • 展示用户列表
      • 添加用户
      • 添加用户

Django 模型使用自带的 ORM

对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。

ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。(词句引用至菜鸟教程)

ORM 解析过程:

1、ORM 会将 Python 代码转成为 SQL 语句。
2、SQL 语句通过 pymysql (等其他类似模块)传送到数据库服务端。
3、在数据库中执行 SQL 语句并将结果返回。

ORM 对应关系表:

ORM数据库
Models类数据表
对象实例一条记录
属性字段

下载mysqlclient安装包

国内镜像
去到安装包的目录下,使用命令行——下载对应版本命令

pip install mysqlclient-2.1.0-cp37-cp37m-win_amd64.whl

在这里插入图片描述

创建数据库——ORM只能操作表,无法创建数据库。

连接数据库——修改settings中的DATABASES

DATABASES = {'default':{'ENGINE':'django.db.backends.mysql','NAME':'mydb_one',#数据库的名字'USER':'root','PASSWORD':'123456','HOST':'localhost', #127.0.0.1'PORT':'3306',}}

Django操作表,在models.py文件中编写——

操作表(大前提app一定要已经注册)

  • (1)类创建表
from django.db import models# Create your models here.#继承models类——创建表
class UserInfo(models.Model):name=models.CharField(max_length=32)password=models.CharField(max_length=32)age=models.IntegerField()# 相当于执行
#create table app01_userinfo(
#   id bigint auto_increment primary key,自动生成不用写
#    name varchar(32),
#   password varchar(64),
#   age int,
#
#
# )

在终端执行

python manage.py makemigrations
python manage.py migrate

即可生成

  • (2)去cmd去查看
mysql -u root -p
show databases;
use mydb_one;
show tables;

有其他的表是框架中具体功能所带的先不用去管他
在这里插入图片描述
在这里插入图片描述

注:(1)想再创建一张表,再添加一个类再执行

python manage.py makemigrations
python manage.py migrate

(2)不想要一张表,将对应类注释掉,再执行

python manage.py makemigrations
python manage.py migrate

修改表中的列

在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:

  1. 手动输入一个值
  2. 设置一个默认值
 # age=models.IntegerField(default=2)
  • 或者允许为空
` #data=models.IntegerField(null=Ture,blank=Ture)`

操作数据表中的数据

  • 插入记录:
    ————类名.objects.create(name=“哈哈” ,age=20,password=‘123’)
UserInfo.objects.create(name="哈哈" ,age=20,password='123')

`

  • 删除记录
    ————类名.objects.filter(条件).delete( )
 UserInfo.objects.filter(name="哈哈" ,age=20,passwore='123').delete( )
  • 获取数据
#取到的是一个列表,每个字段对象(一行记录)的集合UserInfo.objects.all()
#取到的是一个记录,first()表示的是取到一个记录对象
UserInfo.objects.filter(id=1).first()
  • 更改数据
#password字段的值都变为999UserInfo.objects.all( ).update( password=999)#执行满足某一个条件的记录对象filter条件UserInfo.objects.filter(id=1).update( password=999)

案例——用户管理

展示用户列表

(1)url与函数的关系——在urls.py中的urlpatterns数组中加一句

urlpatterns = [
path('info/list/',views.info_list),
]

在这里插入图片描述

(2)编写函数——函数作用:从数据库中获取用户信息,使用data_list接收

def info_list(request):#1.获取数据库中所有用户信息#[]是一个list,每一项记录都是一个对象data_list=models.UserInfo.objects.all()print(data_list)return render(request,'info_list.html',{'data_list':data_list})

在这里插入图片描述
(3)渲染的HTML代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table border="2"><thead><tr><th>ID</th><th>name</th><th>age</th><th>password</th></tr></thead><tbody>{% for obj in data_list %}<tr><td>{{obj.id}}</td><td>{{obj.name}}</td><td>{{obj.age}}</td><td>{{obj.password}}</td></tr>{% endfor %}</tbody></table>
</body>
</html>

效果图:
在这里插入图片描述

添加用户

(1)url与函数的关系——在urls.py中的urlpatterns数组中加一句

urlpatterns = [# 访问网址admin/ 就会去执行函数并执行函数,函数在views中path('info_add/',views.info_add),]

在这里插入图片描述

(2)编写函数——函数作用:
发送get请求到输入页面
使用post请求,提交,将输入的新建用户数据提交到数据库。

def info_add(request):if request.method=='GET':return render(request,'info_add.html')#获取用户提交的数据else:user_1=request.POST.get("user")pwd_1 = request.POST.get("pwd")age_1 = request.POST.get("age")#添加到数据库models.UserInfo.objects.create(name=user_1,password=pwd_1,age=age_1)return HttpResponse('添加成功!')

在这里插入图片描述
(3)演示图:
请添加图片描述

(4)去数据库查看
在这里插入图片描述
(5)跳转到列表显示的页面

#在函数里返回值变为
#记得导包redirectreturn redirect('http://127.0.0.1:8000/info/list/')

添加用户

(1)url(通过GET请求传递参数)
删除传值原理——get请求后添加参数
在这里插入图片描述
在这里插入图片描述
正式编写:在列表页面中添加一个删除按钮绑定参数到get请求

<a href="http://127.0.0.1:8000/info_delete/?nid={{obj.id}}">删除</a>

在这里插入图片描述
列表页面——检查:
在这里插入图片描述
(2)删除函数
在这里插入图片描述
代码如下:

def info_delete(request):nid=request.GET.get('nid')models.UserInfo.objects.filter(id=nid).delete()return HttpResponse('删除成功!')# return redirect("/info/list/")

(3)删除效果演示图:请添加图片描述
(4)查看数据库
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/635781.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT进阶】Qt http编程之后端API测试工具postman使用介绍

往期回顾 【QT进阶】Qt Web混合编程之使用ECharts显示各类折线图等-CSDN博客 【QT进阶】Qt Web混合编程之实现ECharts数据交互动态修改-CSDN博客 【QT进阶】Qt http编程之http与https简单介绍-CSDN博客 【QT进阶】Qt http编程之后端API测试工具postman使用介绍 其实这个工具的…

李宏毅2022机器学习/深度学习 个人笔记(1)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录第一讲&#xff08;选修&#xff09;&#xff1a;神奇宝贝分类 如图&#xff0c;为了估算某个样本属于某类的概率&#xff0c;在二分类问题中&#xff0c;我们需要计算红框所示的4个参数&#xff0…

19.表单输入绑定

表单输入绑定 在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦,v-model 指令帮我们简化了这一步骤 <template><input type"text" v-model"message">…

[阅读笔记16][Orca-2]Teaching Small Language Models How to Reason

接下来是Orca-2&#xff0c;这篇是微软在23年11月发表的论文&#xff0c;在Orca-1的基础上又进行了一些改进。 作者希望教会Orca-2各种推理策略&#xff0c;例如逐步思考、回忆然后回答、先回忆再推理再回答、直接生成回答等等策略。并且Orca-2应该能针对不同任务应该使用最合适…

node-sass报错

node-sass报错 解决方案 有几种解决方案&#xff0c;但感觉都是为了下载vsta_sdk这个工具的。 有的电脑下载C开发程序时可以顺带下载这个插件。 可以直接下载VS之后点击下载C桌面开发&#xff0c;但是有的不行&#xff0c;所以网上也就有另外一种方式&#xff0c;就是下载V…

第63天:服务攻防-框架安全CVE 复现DjangoFlaskNode.JSJQuery

目录 思维导图 案例一&#xff1a;JavaScript-开发框架安全-Jquery&Node node.js目录穿越 CVE-2021-21315命令执行 Jquery CVE-2018-9207 案例二&#xff1a;Python-开发框架安全-Django&Flask django cve_2019_14234 CVE-2021-35042 flask ssti 思维导图 案…

修复vite中使用react提示Fast refresh only works when a file only exports components.

前言 我通过 vite 构建了一个 react 应用并使用 react.lazy 来懒加载组件&#xff0c;但是在使用过程中 一直提示 Fast refresh only works when a file only exports components. Move your component(s) to a separate file.eslint(react-refresh/only-export-components)。…

学习空间转换-3D转换

1.什么是空间转换&#xff1f; 使用的是transform属性实现元素在空间内的位移&#xff0c;旋转&#xff0c;缩放等效果。 空间&#xff1a;是从坐标轴角度定义的。x,y,z三条坐标轴构成的一个立体空间&#xff0c;Z轴位置与视线方向相同。 所以空间转换也被叫做3D转换 语法&a…

排序算法集合

912. 排序数组 趁着这道题总结下排序方法 1.快速排序 算法描述 1.从数列中挑出一个元素&#xff0c;称为"基准"&#xff08;pivot&#xff09;&#xff0c; 2.重新排序数列&#xff0c;所有比基准值小的元素摆放在基准前面&#xff0c;所有比基准值大的元素摆在基…

为什么用云渲染农场?3D云渲染农场助力影视动画行业发展

​计算机图形技术的进步使得3D渲染成为多个产业发展的重要推动力。设计师和艺术家利用这项技术将创意实现&#xff0c;创造出震撼的视觉作品。但是&#xff0c;高质量的渲染需要大量的计算资源。云渲染农场通过提供这些资源&#xff0c;有效提高了渲染的速度和效率&#xff0c;…

精致摄影网站模板 Bootstrap4

目录 一.前言 二.展示 三.下载链接 一.前言 这是一个相机摄影网站。网站结构包括以下部分&#xff1a; 导航栏部分&#xff1a;位于页面顶部&#xff0c;包含了Logo和若干导航链接&#xff0c;如Home、About、Gallery、Services、Testimonial和Contact。 横幅部分&#xff…

接口测试相关

接口测试&#xff0c;接口 接口是数据交互的入口和出口 接口是一套规范和标准 统一设计标准 前后端相对独立 扩展型灵活 接口文档。 接口测试 接口测试环境&#xff0c;运行程序&#xff0c;自己搭建环境 接口测试插件 谷歌postman 火狐 restclient java测试工具为j…