当前位置: 首页 > news >正文

【玩转全栈】----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 ORMPyMySQL
开发效率高:无需手写 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 或 raw SQL 查询。
    • 非 Django 项目,且对性能要求极高时,选择 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 概念 是一种基于树模型的集成学…...

网络安全图谱以及溯源算法

​ 本文提出了一种网络攻击溯源框架&#xff0c;以及一种网络安全知识图谱&#xff0c;该图由六个部分组成&#xff0c;G <H&#xff0c;V&#xff0c;A&#xff0c;E&#xff0c;L&#xff0c;S&#xff0c;R>。 1|11.知识图 ​ 网络知识图由六个部分组成&#xff0c…...

单片机-外部中断

中断是指 CPU 在处理某一事件 A 时&#xff0c;发生了另一事件 B&#xff0c;请求 CPU 迅速去处理(中断发生)&#xff1b;CPU 暂时停止当前的工作(中断响应)&#xff0c; 转去处理事件 B(中断服务)&#xff1b;待 CPU 将事件 B 处理完毕后&#xff0c;再回到原来事件 A 被中断的…...

《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》

《解锁计算机视觉智慧&#xff1a;编程实现图片场景文字描述的开源宝藏》 一、MiniGPT-4&#xff1a;小模型撬动大视觉理解&#xff08;一&#xff09;项目概览&#xff08;二&#xff09;核心亮点&#xff08;三&#xff09;上手体验 二、ClipCap-Chinese&#xff1a;中文场景…...

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中&#xff0c;页面跳转时&#xff0c; onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明&#xff1a; 1. 页面跳转方式 微信小程序提供了多种页面…...

Visio 画阀门 符号 : 电动阀的画法

本篇文章介绍阀门&#xff0c;很多朋友在利用Visio绘画管道流程简图时&#xff0c;需要进行阀门符号的绘画&#xff0c;而Visio提供的阀门符号种类并不是很齐全。 本篇文章给出电动阀的画法&#xff1a; 下图是液动阀的符号&#xff1a; 首先&#xff0c;找到“更多形状”中的…...

OOM排查思路

K8S 容器的云原生生态&#xff0c;改变了服务的交付方式&#xff0c;自愈能力和自动扩缩等功能简直不要太好用。 有好的地方咱要夸&#xff0c;不好的地方咱也要说&#xff0c;真正的业务是部署于容器内部&#xff0c;而容器之外&#xff0c;又有一逻辑层 Pod 。 对于容器和…...

《Spring Framework实战》10:4.1.4.2.详细的依赖和配置

欢迎观看《Spring Framework实战》视频教程 集合 <list/>、<set/>、<map/>和<props/>元素分别设置Java集合类型list、set、map和properties的属性和参数。以下示例显示了如何使用它们&#xff1a; <bean id"moreComplexObject" class&qu…...

网络安全-XSS跨站脚本攻击(基础篇)

漏洞扫描的原理 1.跨站脚本攻击介绍 xss跨站脚本攻击&#xff1a; xSS 全称&#xff08;Cross site Scripting &#xff09;跨站脚本攻击&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&#xff0c;XSS是指攻…...

Git的学习和常见问题

文章目录 1.初始化配置2.新建仓库3.添加和提交文件4.git reset 回退版本5.git diff 查看差异6.git rm 删除文件7.文件 .gitigonre8.克隆远程仓库9.将已有的本地仓库关联到远程仓库10.分支的基本操作11.解决合并冲突配置问题 最近基于GeekHour的视频学习Git&#xff0c;记录了一…...

Flink源码解析之:Flink on k8s 客户端提交任务源码分析

Flink on k8s 客户端提交任务源码分析 当我们需要在代码中提交Flink job到kubernetes上时&#xff0c;需要如何做呢&#xff1f;要引入什么第三方依赖&#xff1f;需要提供什么内容&#xff1f;flink是如何将job提交到k8s上的&#xff1f;经过了什么样的流程&#xff0c;内部有…...

STLG_02_02_MS SQL - SSMS的安装和使用

SQL Server Management Studio (SSMS) 是 Microsoft 提供的一个集成环境&#xff0c;用于管理、开发和维护 SQL Server 数据库和 Analysis Services 数据库。 一、安装 SSMS 下载 SSMS: 访问 Microsoft 官方网站的 SSMS 下载页面。选择适合你操作系统的版本进行下载。SSMS 支持…...

git 常用命令和本地合并解决冲突

目录 一、常用命令 二、本地可视化合并分支解决冲突 一、常用命令 最近&#xff0c;使用mac电脑&#xff0c;无法直接使用小乌龟进行可视化操作&#xff0c;现在记录一些常用命令。 拉取&#xff1a; git clone <git url> 仅拉起某个单独分支&#xff1a; git clo…...

ThinkPHP 8高效构建Web应用-获取请求对象

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

机器人技术:ModbusTCP转CCLINKIE网关应用

在当今自动化生产与智能制造领域&#xff0c;ModbusTCP转CC-LinkIE网关KJ-MTCPZ-CCIES的应用正日益成为提升生产效率、实现设备间高效通信的重要技术手段。这一转换技术不仅打破了不同通信协议间的壁垒&#xff0c;还为机器人产品的应用提供了更为广阔的舞台。ModbusTCP作为一种…...

C语言的语法

C语言的语法与应用探讨 C语言作为一种高效的程序设计语言&#xff0c;自1970年代问世以来&#xff0c;一直在科学计算、系统编程、嵌入式系统等领域中扮演着重要角色。本文将深入探讨C语言的基本语法、数据结构、控制结构以及其在实际应用中的重要性。 一、C语言基础 1.1 数…...

设置 Docker 化的 Python 环境 — 优雅的方式

原文&#xff1a;towardsdatascience.com/setting-a-dockerized-python-environment-the-elegant-way-f716ef85571d?sourcecollection_archive---------1-----------------------#2024-04-02 本文提供了一个逐步指南&#xff0c;介绍如何使用 VScode 和 Dev Containers 扩展设…...

合宙ESP32-C3用PlatformIO调试,别再为USB CDC和DIO配置头疼了

合宙ESP32-C3 PlatformIO调试实战&#xff1a;USB CDC与DIO配置全解析 第一次接触合宙ESP32-C3的开发板时&#xff0c;我被它简洁的设计和亲民的价格所吸引。但当我兴冲冲地打开PlatformIO准备大展拳脚时&#xff0c;却接连遇到了串口无法识别、程序下载失败等一系列问题。经过…...

DOL-CHS-MODS整合包:2024一站式解决方案,3大优势助你轻松体验Degrees of Lewdity

DOL-CHS-MODS整合包&#xff1a;2024一站式解决方案&#xff0c;3大优势助你轻松体验Degrees of Lewdity 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DOL-CHS-MODS整合包作为Degrees of Lewdity游…...

电容是什么?一个“快充快放”的微型充电宝氯

一、前言&#xff1a;什么是 OFA VQA 模型&#xff1f; OFA&#xff08;One For All&#xff09;是字节跳动提出的多模态预训练模型&#xff0c;支持视觉问答、图像描述、图像编辑等多种任务&#xff0c;其中视觉问答&#xff08;VQA&#xff09;是最常用的功能之一——输入一张…...

深入解析ActivityMainBinding:从基础绑定到高级应用

1. ActivityMainBinding基础入门 第一次接触ActivityMainBinding时&#xff0c;我完全被它自动生成的特性震惊了。这个看似简单的类&#xff0c;实际上是Android DataBinding技术的核心枢纽。简单来说&#xff0c;每当你在res/layout目录下创建带有<layout>标签的XML文件…...

自动化测试面试中常见的问题

一、测试用例再执行点击元素时失败&#xff0c;导致整个测试用例失败。如何提高点击元素的成功率?解决办法&#xff1a;selenium是在点击元素时是通过元素定位的方式找到元素的&#xff0c;要提高点击的成功率&#xff0c;必须保证找到元素的定位方式准确。但是在自动化工程的…...

大模型技术入门指南:小白程序员必备,收藏学习轻松掌握AI未来!

随着国家“人工智能”行动的推进&#xff0c;大模型技术正从通用能力探索转向行业价值兑现的新阶段。文章介绍了AI大模型的技术特点、产业链构成、市场规模以及国内外发展现状&#xff0c;强调中国AI大模型正加速迭代&#xff0c;与海外差距持续缩窄。此外&#xff0c;文章还探…...

Pretext:值得关注的文本排版引擎陨

一、语言特性&#xff1a;Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一&#xff0c;就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

抖音下载器技术架构与实战指南:高效获取无水印视频的创新方案

抖音下载器技术架构与实战指南&#xff1a;高效获取无水印视频的创新方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

Mac上通过Homebrew快速部署Miniconda:轻量级Python环境管理指南

1. 为什么选择Miniconda Homebrew组合&#xff1f; 在Mac上管理Python环境就像整理衣柜——你既需要足够的空间存放不同季节的衣服&#xff08;各种Python版本和库&#xff09;&#xff0c;又不想让整个房间被衣柜塞满。这就是为什么我强烈推荐Miniconda和Homebrew这对黄金组合…...