【玩转全栈】----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 数…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
