【玩转全栈】----Django连接MySQL
阅前先赞,养好习惯!
目录
1、ORM框架介绍
选择建议
2、安装mysqlclient
3、创建数据库
4、修改settings,连接数据库
5、对数据库进行操作
创建表
删除表
添加数据
删除数据
修改(更新)数据:
获取数据
1、ORM框架介绍
之前讲过MySQL连接pymysql,PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,用于直接与 MySQL 数据库交互。通过 PyMySQL,可以发送原生 SQL 查询语句,并获取查询结果。但是大家也能看到,PyMySQL的一些语句其实和MySQL是差不多的,并且代码比较繁琐,切换数据库也很麻烦,要修改大量代码。
现在来介绍另一种方法:ORM
Django 的 ORM(Object-Relational Mapping)是一种将数据库表和 Python 类关联起来的工具,允许开发者通过操作 Python 对象来与数据库交互,而不需要直接编写 SQL 查询。
两者区别:
| 特性 | Django ORM | PyMySQL |
|---|---|---|
| 开发效率 | 高:无需手写 SQL,直接用 Python 操作数据库。 | 低:需要手写 SQL,代码量多,容易出错。 |
| 代码可读性 | 高:简洁、结构化,贴近业务逻辑。 | 中:需要理解 SQL 和 Python 代码的混合逻辑。 |
| 数据库独立性 | 强:支持多种数据库(MySQL、PostgreSQL、SQLite 等),切换数据库只需更改配置,无需改动代码。 | 弱:依赖 MySQL,切换数据库需要修改大量 SQL。 |
| 学习成本 | 低:只需学习 Django 的模型和查询 API。 | 高:需要熟悉 SQL 语法和数据库操作。 |
| 性能 | 中:抽象层带来开销,复杂查询可能性能较低。 | 高:直接发送 SQL,性能更高。 |
| 功能扩展 | 高:内置丰富功能,如分页、外键、查询优化等。 | 低:需要自己实现复杂功能。 |
| 错误处理 | 自动处理,减少手动处理的错误风险。 | 完全依赖开发者,错误处理工作量大。 |
选择建议
-
使用 Django ORM:
- 开发 Django 项目时,优先选择 ORM。它能大幅提升开发效率,特别是对于中小型项目。
- 如果项目大部分操作是增删改查,ORM 是首选。
-
使用 PyMySQL:
- 如果需要处理复杂的 SQL 查询或高性能场景,可以结合 PyMySQL 使用。例如,在 Django 项目中,使用 ORM 完成大部分逻辑,少数复杂场景下直接用 PyMySQL 或
rawSQL 查询。 - 非 Django 项目,且对性能要求极高时,选择 PyMySQL。
- 如果需要处理复杂的 SQL 查询或高性能场景,可以结合 PyMySQL 使用。例如,在 Django 项目中,使用 ORM 完成大部分逻辑,少数复杂场景下直接用 PyMySQL 或
ORM是一个框架,可以通过PyMySQL工具来操作MySQL,而在Django开发中,一般使用mysqlclient工具而并非PySQL,有两个原因,一个是Django 官方文档中明确推荐使用 mysqlclient,因为它和 Django 的 ORM 紧密集成,兼容性经过了长期验证;还有就是mysqlclient的性能要好一点。
Orm将数据库基本语句弄得更简单,将简单的语句翻译成数据库原生代码。
2、安装mysqlclient
打开控制台输入:
pip install mysqlclient
安装成功界面:

3、创建数据库
由于mysqlclient无法创建数据库,所以得我们自己创建,详细教程前文有说:
【全栈开发】----Mysql基本配置与使用-CSDN博客
进入到mysql>下,输入:
create database mydata default character set utf8;
并检查mydata是否已被创建
show databases;

4、修改settings,连接数据库
打开settings文件,这里是默认的连接sqlite3,这也是一种数据库,我们要改成MySQL的,先把这段代码注释。

输入:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', #django连接mysql,还可以连oracle、sqlite3、postgresql等等'NAME': 'mydata', #数据库名字'USER':'root', #用户'PASSWORD':'612612', #密码'HOST':'127.0.0.1', #主机'PORT':'3306', #端口}
}
注意!大家的数据库名称和密码可能与我不一样,修改一下即可
5、对数据库进行操作
创建表

在app的models文件中,每新建一个类,就是创建一张表,类需继承models类
class Department(models.Model):title = models.CharField(max_length=32)
例如上面的Department类就是创建了一张表,表中有title行,32位字符型
class UserInfo(models.Model): #继承models类name = models.CharField(max_length=32)password = models.CharField(max_length=64)age = models.IntegerField()
UserInfo类定义了一个长度为32的字符串行name,长度为64的字符串行password,有符号情况下最多十位的整型age行。
类名代替表名,字段名代表列名
上面的UserInfo类其实就相当于MySQL中的:
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
在Pycharm终端依次输入运行即可
注意前提是下载了mysqlclient库,并且app已注册

检查表是否创建成功:
desc app01_userinfo;
注意!!!虽然我们在models中创建的是UserInfo类,但mysqlclient处理后真正的表名是
应用名+_+类(类全小写)
所以此处表名是 app01_userinfo

创建表后还能再添加字段吗?当然是可以的
在类中再添加一个字段,输入:
size = models.IntegerField()
运行后提示:

1、要是选择1的话,点击Enter,会提示让您输入一个默认值,然后那一列都将是那个默认值。
2、要是选2的话,并且没有任何操作,数据库中将不会显示新加的数据。
3、选2后,在源代码中添加默认值,将会出现数据。
size = models.IntegerField(default=2)
也可以将数据设置成空:
size = models.IntegerField(null=True,blank=True)
删除表
删除表很简单,只需要将类注释或者直接删掉,再输入这两行命令刷新即可
python manage.py makemigrations
python manage.py migrate
添加数据
新建一个url,用来测试是否添加数据
def orm(requests):# 测试orm操作表中的数据return HttpResponse("成功")
增加数据命令:
UserInfo.objects.create(name="谭谈",password="1234",age=18)
启动项目,发现数据确实是添加进去了

大家可以自己再多添加几行数据,便于后面的修改与删除

删除数据
删除满足特定条件的数据:
Department.objects.filter(id=2).delete()
确实是删除了

删除全部数据:
这就不演示了,大家可以自己玩玩
UserInfo.objects.all().delete()
修改(更新)数据:
UserInfo.objects.filter(id=1).update(name="有的兄弟")
确实是修改了

获取数据
使用.all()方法获取数据
data_list = UserInfo.objects.all()
print(data_list)
可以先在控制台打印看看

发现拿到的是一个QuerySet对象,包含三个数据,每个数据后面的数字代表ID值
可以通过迭代器和点属性来获取具体的值:
for data in data_list:print(data.id,data.name,data.password,id.age)
发现确实是被正确获取并打印了:

获取到的QuerySet可以通过索引和其他方法取值,常见的有以下三种,我就不一一介绍了,大家可以自己玩玩:
.first() vs .get() vs [0]
| 方法 | 返回值 | 异常处理 | 使用场景 |
|---|---|---|---|
.first() | 第一条记录或 None | 不抛出异常 | 不确定是否有数据时更安全 |
.get() | 符合条件的唯一对象 | 抛出 DoesNotExist 异常 | 确定条件只会返回一条数据时使用 |
[0] | 第一条记录或抛出 IndexError | 抛出 IndexError 异常 | 确定有数据且只需第一条时使用 |
本次分享就到这儿了
下一篇博客更新用户管理综合案例!!!
感谢您的三连!!!
相关文章:
【玩转全栈】----Django连接MySQL
阅前先赞,养好习惯! 目录 1、ORM框架介绍 选择建议 2、安装mysqlclient 3、创建数据库 4、修改settings,连接数据库 5、对数据库进行操作 创建表 删除表 添加数据 删除数据 修改(更新)数据: 获取数据 1、OR…...
25/1/4 算法笔记<强化学习> 生成对抗模仿学习
基于生成对抗网络的模仿学习,假设存在一个专家智能体,其策略可以看成最优策略,我们就可以通过直接模仿这个专家在环境中交互的动作数据来训练一个策略,并不需要用到环境提供的奖励信息。 生成对抗模仿学习GAIL实质上就是模仿了专家…...
Flink维表方案选型
Iceberg Iceberg 采用全量预加载数据的方式将维度表数据全部加载到内存中进行关联,虽然可以避免频繁访问外部数据库,但对计算节点的内存消耗很高,不能适用于数量很大的维度表。除此之外,当 Iceberg 维表数据更新后,可…...
Oracle Database 23ai 新特性: UPDATE 和 DELETE 语句的直接联接
Oracle Database 23c 引入了一系列令人振奋的新特性,其中一项尤为引人注目的是对 UPDATE 和 DELETE 语句支持直接联接(Direct Join)。这一新功能极大地简化了复杂数据操作的实现,提升了性能,并为数据库开发者提供了更强…...
机器学习之随机森林算法实现和特征重要性排名可视化
随机森林算法实现和特征重要性排名可视化 目录 随机森林算法实现和特征重要性排名可视化1 随机森林算法1.1 概念1.2 主要特点1.3 优缺点1.4 步骤1.5 函数及参数1.5.1 函数导入1.5.2 参数 1.6 特征重要性排名 2 实际代码测试 1 随机森林算法 1.1 概念 是一种基于树模型的集成学…...
网络安全图谱以及溯源算法
本文提出了一种网络攻击溯源框架,以及一种网络安全知识图谱,该图由六个部分组成,G <H,V,A,E,L,S,R>。 1|11.知识图 网络知识图由六个部分组成,…...
单片机-外部中断
中断是指 CPU 在处理某一事件 A 时,发生了另一事件 B,请求 CPU 迅速去处理(中断发生);CPU 暂时停止当前的工作(中断响应), 转去处理事件 B(中断服务);待 CPU 将事件 B 处理完毕后,再回到原来事件 A 被中断的…...
《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》
《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》 一、MiniGPT-4:小模型撬动大视觉理解(一)项目概览(二)核心亮点(三)上手体验 二、ClipCap-Chinese:中文场景…...
onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制
文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中,页面跳转时, onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明: 1. 页面跳转方式 微信小程序提供了多种页面…...
Visio 画阀门 符号 : 电动阀的画法
本篇文章介绍阀门,很多朋友在利用Visio绘画管道流程简图时,需要进行阀门符号的绘画,而Visio提供的阀门符号种类并不是很齐全。 本篇文章给出电动阀的画法: 下图是液动阀的符号: 首先,找到“更多形状”中的…...
OOM排查思路
K8S 容器的云原生生态,改变了服务的交付方式,自愈能力和自动扩缩等功能简直不要太好用。 有好的地方咱要夸,不好的地方咱也要说,真正的业务是部署于容器内部,而容器之外,又有一逻辑层 Pod 。 对于容器和…...
《Spring Framework实战》10:4.1.4.2.详细的依赖和配置
欢迎观看《Spring Framework实战》视频教程 集合 <list/>、<set/>、<map/>和<props/>元素分别设置Java集合类型list、set、map和properties的属性和参数。以下示例显示了如何使用它们: <bean id"moreComplexObject" class&qu…...
网络安全-XSS跨站脚本攻击(基础篇)
漏洞扫描的原理 1.跨站脚本攻击介绍 xss跨站脚本攻击: xSS 全称(Cross site Scripting )跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻…...
Git的学习和常见问题
文章目录 1.初始化配置2.新建仓库3.添加和提交文件4.git reset 回退版本5.git diff 查看差异6.git rm 删除文件7.文件 .gitigonre8.克隆远程仓库9.将已有的本地仓库关联到远程仓库10.分支的基本操作11.解决合并冲突配置问题 最近基于GeekHour的视频学习Git,记录了一…...
Flink源码解析之:Flink on k8s 客户端提交任务源码分析
Flink on k8s 客户端提交任务源码分析 当我们需要在代码中提交Flink job到kubernetes上时,需要如何做呢?要引入什么第三方依赖?需要提供什么内容?flink是如何将job提交到k8s上的?经过了什么样的流程,内部有…...
STLG_02_02_MS SQL - SSMS的安装和使用
SQL Server Management Studio (SSMS) 是 Microsoft 提供的一个集成环境,用于管理、开发和维护 SQL Server 数据库和 Analysis Services 数据库。 一、安装 SSMS 下载 SSMS: 访问 Microsoft 官方网站的 SSMS 下载页面。选择适合你操作系统的版本进行下载。SSMS 支持…...
git 常用命令和本地合并解决冲突
目录 一、常用命令 二、本地可视化合并分支解决冲突 一、常用命令 最近,使用mac电脑,无法直接使用小乌龟进行可视化操作,现在记录一些常用命令。 拉取: git clone <git url> 仅拉起某个单独分支: git clo…...
ThinkPHP 8高效构建Web应用-获取请求对象
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
机器人技术:ModbusTCP转CCLINKIE网关应用
在当今自动化生产与智能制造领域,ModbusTCP转CC-LinkIE网关KJ-MTCPZ-CCIES的应用正日益成为提升生产效率、实现设备间高效通信的重要技术手段。这一转换技术不仅打破了不同通信协议间的壁垒,还为机器人产品的应用提供了更为广阔的舞台。ModbusTCP作为一种…...
C语言的语法
C语言的语法与应用探讨 C语言作为一种高效的程序设计语言,自1970年代问世以来,一直在科学计算、系统编程、嵌入式系统等领域中扮演着重要角色。本文将深入探讨C语言的基本语法、数据结构、控制结构以及其在实际应用中的重要性。 一、C语言基础 1.1 数…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
