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

news2024/11/16 12:06:40

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字段的值都变为999
 UserInfo.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)跳转到列表显示的页面

#在函数里返回值变为
#记得导包redirect
	return 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.coloradmin.cn/o/1611290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字接龙(蓝桥杯)

文章目录 数字接龙【问题描述】解题思路DFS 数字接龙 【问题描述】 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上…

专利基础概念

专利是一种知识产权形式&#xff0c;它为发明创造提供了一种法律保护机制&#xff0c;允许发明者在一定期限内对其发明享有独占权。 1、专利类型 专利类型&#xff0c;也被称为专利的客体&#xff0c;是指符合专利授予条件的各种发明创造。根据中国专利法&#xff0c;发明创造…

【经典小游戏】猜数字

前言1. 游戏介绍2. 游戏实现3. 游戏优化结语 个人主页&#xff1a;C_GUIQU 前言 各位小伙伴大家好&#xff01; 先问大家一个问题&#xff1a;我们为什么要学习&#xff1f; 简单来说&#xff0c;就是为了实践&#xff01;只有不断学习才可以帮助我们更好地实践&#xff01; 小…

【Java网络编程】网络编程中的基本概念及实现UDP、TCP客户端服务器程序

目录 一、什么是网络编程&#xff1f; 二、网络编程中的基本概念 1. 客户端和服务器 2. 请求和响应 三、Socket套接字 UDP数据报套接字编程 1. DatagramSocket 2. DatagramPacket 3. UDP回显客户端服务器程序 4. UDP字典客户端服务器程序 TCP流套接字编程 1. Serve…

【JS】js数字转k、w结尾 | 1000 = 1k

问题 数字转k、w结尾 如&#xff1a;10001k 100001w 码 /*** 数字转k,w* param {Number} num * returns String*/ const numberTokw num > {if (num < 1000) return numlet endStr w,numVal 10000;if (num > 999 && num < 10000) {endStr knumVal …

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0…

物联网实战--驱动篇之(九)NB-IOT(BC260)

目录 一、NB-IOT简介 二、NB-IOT要素 三、代码详解 四、平台端 一、NB-IOT简介 实际上&#xff0c;就是NB-Iot彻底引爆了物联网的&#xff0c;大概2018年左右&#xff0c;NB推广如火如荼&#xff0c;同时广域网、低功耗的LPWAN网络也逐渐传开&#xff0c;现在回头来看&…

Flyweight 享元

意图 运用共享技术有效地支持大量细粒度的对象。 结构 其中 Flyweight描述一个接口&#xff0c;通过这个接口Flyweight可以接受并作用于外部状态。ConcreteFlyweight实现Flyweight接口&#xff0c;并作为内部状态&#xff08;如果有&#xff09;增加存储空间。ConcreteFlywe…

[Java基础揉碎]集合

目录 集合的理解和好处 数组 集合的理解和好处 继承图 ​编辑 简单实例 Collection接口和常用方法 1) add:添加单个元素 2) remove:删除指定元素 3) contains:查找元素是否存在 4) size:获取元素个数 5) isEmpty:判断是否为空 ​编辑 6) clear:清空 7) addAll:添…

Prior Knowledge-Guided Transformer for Remote Sensing Image Captioning

Prior Knowledge-Guided Transformer for Remote Sensing Image Captioning 1. 摘要 遥感图像(RSI)字幕生成旨在为遥感图像生成有意义且语法正确的句子描述。然而,相比于自然图像字幕,RSI字幕生成面临着由于RSI特性而产生的额外挑战。第一个挑战源于这些图像中存在大量物体。…

ssh-key关于authorized_keys电脑与linux互相认证

思路&#xff1a; 在A上生成公钥私钥。将公钥拷贝给server B&#xff0c;要重命名成authorized_keys(从英文名就知道含义了)Server A向Server B发送一个连接请求。Server B得到Server A的信息后&#xff0c;在authorized_key中查找&#xff0c;如果有相应的用户名和IP&#xf…

冰达ROS机器人快速使用指南

欢迎来到《冰达ROS机器人极简使用指南》 Q&#xff1a;这份教程适合谁&#xff1f; A&#xff1a;适合完全0基础新手&#xff0c;需要快速跑起来机器人的基本功能。也适合技术大佬需要快速的了解冰达ROS机器人的使用方法。 Q&#xff1a;这份教程内容很少&#xff0c;是不是…

路由器热备份

HSRP HSRP&#xff08;Hot Standby Routing Protocol&#xff09;热备份路由选择协议 HSRP是思科私有的协议&#xff0c;HSRP起到一个双网关热备份的一个目的&#xff0c;不考虑线路问题针对设备而言&#xff0c;一个设备挂了还有另外一台设备&#xff0c;所以双网关也叫双机…

动力学重构/微分方程参数拟合 - 基于模型

这一篇文章&#xff0c;主要是给非线性动力学&#xff0c;对微分方程模型参数拟合感兴趣的朋友写的。笼统的来说&#xff0c;这与混沌系统的预测有关&#xff1b;传统的机器学习的模式识别虽然也会谈论预测结果&#xff0c;但他们一般不会涉及连续的预测。这里我们考虑的是&…

URL地址解析至页面展示全过程(面试详细解答)

目录 1、解析URL 2、缓存判断 ​编辑3、DNS解析 ​编辑4、获取MAC地址 5、TCP三次握手 6、HTTP请求 7、服务器处理请求&#xff0c;返回HTTP响应 8、页面渲染 9、TCP四次挥手 10、浏览器解析HTML 11、浏览器布局渲染 1、解析URL 首先会对 URL 进行解析&#xff0c;…

C++_类型转换

文章目录 学习目标&#xff1a;1.static_cast2. reinterpret_cast3.const_cast4. dynamic_cast 学习过程1.static_cast2. reinterpret_cast3.const_cast在这里插入图片描述4. dynamic_cast 学习目标&#xff1a; 标准C为了加强类型转换的可视性&#xff0c;引入了四种命名的强…

黑马程序员Linux简单入门学习笔记

Linux介绍 内核提供系统最核心的功能&#xff0c;如: 调度CPU、调度内存、调度文件系统、调度网络通讯、调度等系统级应用程序&#xff0c;可以理解为出厂自带程序&#xff0c;可供用户快速上手操作系统&#xff0c;如:文件管理器、任务管理器、图片查看、音乐播放等 目录结构 …

在PostgreSQL中如何实现递归查询,例如使用WITH RECURSIVE构建层次结构数据?

文章目录 解决方案使用WITH RECURSIVE进行递归查询示例代码 总结 在PostgreSQL中&#xff0c;递归查询是一种非常强大的工具&#xff0c;它可以用来查询具有层次结构或树形结构的数据。例如&#xff0c;你可能会在员工-经理关系、目录结构或组织结构图中遇到这样的数据。为了处…

*Linux系统的进程和计划任务管理

目录 一、查看进程 1、程序和进程的关系 *2、ps查看静态进程信息 1&#xff09;ps aux 2&#xff09;ps -elf *3、top查看动态进程信息 4、pgrep查看进程信息 5、pstree查看进程树 二、控制进程 1、进程启动方式 2、进程的前后台调度 3、终止进程的运行 三、计划任…

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 1. 搭建Linux内核源码阅读环境 现状&#xff0c;Linux内核源码比较庞大文件非常多&#xff0c;其中又包含的众多的宏定义开关配置选项&#xff0c;这使得阅读内核源代码称为一件头疼的事。 …