【Django学习笔记(八)】MySQL的数据管理

news2025/1/10 12:14:46

MySQL的数据管理

  • 前言
  • 正文
    • 1、新增数据
    • 2、删除数据
    • 3、修改数据
    • 4、查询数据
    • 5、案例:员工管理
      • 5.1 创建表结构
        • 5.1.1 创建数据库
        • 5.1.2 创建数据表
      • 5.2 Python操作MySQL
        • 5.2.1 pymysql 的基本操作步骤
        • 5.2.2 优化 pymysql 的基本操作步骤
        • 5.2.3 查询数据
        • 5.2.4 修改数据
        • 5.2.5 删除数据
        • 5.2.5 注意事项

前言

在本文中,将深入剖析 MySQL 数据库的核心操作——增删改查(CRUD),并探讨如何利用 Python 的第三方库 pymysql 高效执行这些操作。通过具体案例的展示,读者不仅能够理解 MySQL 的基本语法和逻辑,还能掌握 pymysql 库的使用方法,从而在实际开发中灵活运用,实现数据的精准管理。

正文

平时在开发系统时,一般情况下:

  • 创建数据库
  • 创建数据表

都是需要提前通过工具+命令创建。

1、新增数据

insert into 表名称(列名,列名, ...) values(,, ...);
insert into 表名称(列名,列名, ...) values(,, ...),(,, ...),(,, ...),...;

2、删除数据

delete from 表名称;				--删除所有数据
delete from 表名称 where 条件;	--删除指定数据

在这里插入图片描述
删除 id = 3 的数据

delete from tb7 where id=3;

在这里插入图片描述

3、修改数据

update 表名称 set=;				--修改一列
update 表名称 set=,=;		--修改多列
update 表名称 set=where 条件;		--修改某行某列

在这里插入图片描述

4、查询数据

select 字段名(或者*) from 表名称;
select 字段名(或者*) from 表名称 where 条件;

在这里插入图片描述

5、案例:员工管理

使用 MySQL 内置工具(命令)

  • 创建数据库:unicom;

  • 创建数据表:admin;

    表名:admin;
    列:
        id,整型,自增,主键;
        username,字符串,不为空;
        password,字符串,不为空;
        mobile,字符串,不为空
    
  • Python代码实现:

    • 添加用户;
    • 删除用户;
    • 查看用户;
    • 更新用户信息;

5.1 创建表结构

5.1.1 创建数据库
create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
5.1.2 创建数据表
create table admin(
id int not null auto_increment primary key,
username varchar(16) not null,
password char(64) not null,
mobile char(11) not null
) default charset=utf8;

在这里插入图片描述

5.2 Python操作MySQL

用 Python 代码连接 MySQL 并发送指令,需要使用第三方库 pymysql

5.2.1 pymysql 的基本操作步骤
  1. 创建数据库连接对象+游标对象
  2. 利用游标对象的 execute() 执行 sql 命令
  3. 提交到数据库执行:commit()
  4. 关闭游标+断开数据库连接
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2、利用游标对象的 execute() 执行 sql 命令
cursor.execute("insert into admin(username,password,mobile) values('Jack','123','17766665555')")

# 3、提交到数据库执行:commit()
conn.commit()

# 4、关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

5.2.2 优化 pymysql 的基本操作步骤

注意:
千万不要使用字符串格式化做 SQL 的拼接,会有SQL注入的风险,需要使用 cursor.execute(sql, [参数1, 参数2, …])

import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2、利用游标对象的 execute() 执行 sql 命令
sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
cursor.execute(sql, ['LiLei', '000000', '13512349999'])

# 3、提交到数据库执行:commit()
conn.commit()

# 4、关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

或者:

sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql, {'n1': 'HanMeimei', 'n2': '123456', 'n3': '11377775555'})

在这里插入图片描述

5.2.3 查询数据
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2、利用游标对象的 execute() 执行 sql 命令
sql = "select * from admin where id > %s"
cursor.execute(sql, [1, ])
# 查询所有符合条件的数据,为列表套多个字典
data_list = cursor.fetchall()
# 遍历数据
for row_dict in data_list:
    print(row_dict)

# 3.关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

获取符合条件的第一条数据:cursor.fetone()

5.2.4 修改数据
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.利用游标对象的 execute() 执行 sql 命令
sql = "update admin set mobile=%s where id = %s"
cursor.execute(sql, ['13088889999', 3])
conn.commit()

# 3.关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

5.2.5 删除数据
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.利用游标对象的 execute() 执行 sql 命令
sql = "delete from admin where id = %s"
cursor.execute(sql, [3, ])
conn.commit()

# 3.关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

5.2.5 注意事项
  • 在进行 新增、删除、修改时,一定记得要 commit ,不然数据库没有数据

    cursor.execute("...")
    conn.commit()
    
  • 在查询时,不需要 commit,执行 fetchall / fetchone

    cursor.execute("...")
    
    # 第一条数据,字典,无数据时是空列表
    cursor.fetchone()
    
    # 所有数据,列表套字典,无数据是是None
    cursor.fetchall()
    
  • 对于 SQL 语句不要用 Python 的字符串格式化进行拼接(会被SQL注入),一定要使用 execute + 参数

    cursor.execute(sql, ['xxx', 'xxx', 'xxx'])
    

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

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

相关文章

数据结构之栈的超详细讲解

目录 引言 一.栈的概念 二.栈的结构 三.栈的实现 栈结构的实现 栈操作函数的声明 栈中方法的实现 栈的初始化 栈的销毁 入栈 出栈 取栈顶元素 判断栈中是否为空 获取栈中数据个数 四.测试 代码展示: 结构展示: 五.小结 六.完整代码 Stack.h Stack.c text…

看Diffusion模型如何提升端到端自动驾驶的能力

文章链接:https://openreview.net/pdf?idyaXYQinjOA 自动驾驶领域在分割和规划模型性能方面取得了显著进展,这得益于大量数据集和创新的架构。然而,这些模型在遇到罕见子群,比如雨天条件时,往往表现不佳。获取必要的…

编程入门(六)【Linux系统基础操作二】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀文件与目录的操作命令cd change directory的缩…

RSA理解版本2

RSA原理理解 起源: RSA是一种公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏的首字母组成的。 简介: RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中…

JWK和JWT 学习

JWK和JWT 介绍 JWK (JSON Web Key) 和 JWT (JSON Web Token) 是现代Web应用程序中用于安全通信的两个重要概念。它们都是基于JSON的,并且是OAuth 2.0和OpenID Connect等协议的核心组成部分。 官方文档 JWT官方网站 JWK和JWK Set的RFC文档 JWT的RFC文档 JWK (JS…

linux内核网络源码--通知链

内核的很多子系统之间有很强的依赖性,其中一个子系统侦测到或者产生的事件,其他子系统可能都有兴趣,为了实现这种交互需求,linux使用了所谓的通知链。 本章我们将看到 通知链如何声明以及网络代码定义了哪些链 内核子系统如何向通…

Qt | QLCDNumber 类(LCD 数字),LCD 表示液晶显示屏

01、上节回顾 Qt 基础教程合集02、QLCDNumber 1、QLCDNumber 类用于显示类似于 LCD 显示屏上的字符(见右图) ​ 2、QLCDNumber 类是 QFrame 类的直接子类,因此 QLCDNumber 以使用从 QFrame 类继承而来的边框效果 3、QLCDNumber 可显示的符号有:0,1,2,3,4,5,6,7,8,…

Docker——consul的容器服务更新与发现

一、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决手段…

OceanBase 如何实现多层面的资源隔离

OceanBase的资源隔离涵盖了多个方面,如物理机器间的隔离、不同租户之间的隔离、同一租户内的隔离,以及针对大型查询请求的隔离等。在实际应用OceanBase的过程中,我们经常会遇到这些操作场景或产生相关需求。这篇文章针对这些内容进行了简要的…

数据库系统原理实验报告5 | 数据查询

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ———— 本次实验使用到的图形化工具:Heidisql 目录 一、实验目的 二、实验内容 1.找出读者所在城市是“shangh…

垂起固定翼+多旋翼无人机+集群组网:高低空域协同组网通信技术详解

垂起固定翼、多旋翼无人机与自组网的结合,为高低空域协同组网通信技术提供了创新的解决方案。这种结合充分利用了各种技术的优势,使得无人机在高低空域中的协同作业和通信更加高效和灵活。 首先,垂起固定翼无人机以其垂直起降能力和长航时的…

第28章-PPPoE

1. 以太网接入的典型应用 1.1. IP技术的应用与发展 1.2. 以太网接入的典型应用场景之一——大型园区接入的典型应用 2. PPPoE技术的基本原理 2.1. 技术背景 2.2. PPPoE工作原理 2.3. PPPoE的两个阶段:Discovery阶段和PPPSession阶段 2.4. PPPoE的帧结构 2.5. PPPoE…

如何高效封装App?小猪APP分发平台一站式解决方案

在移动应用开发领域,App封装(App Packaging)是一个至关重要的环节,它不仅关乎应用的安全性,还直接影响到最终用户体验和市场推广策略。本文旨在通过实战指南,揭示如何高效完成App封装,并介绍如何…

python爬虫(二) 之 42号网汽车文章爬虫

python爬虫(二) 之 42号网汽车文章爬虫 今天在咸鱼上有个买家找我一个42号网汽车文章的爬虫,目前需求已经做完了,现在将这部分代码开源,供大家参考。爬虫能够抓取到网站上所有文章的数据,大概一小时左右就…

buuctf[pwn]

buuctf[PWN] 题目:rip(栈对齐) 知识点:栈对齐 题目地址:BUUCTF在线评测 (buuoj.cn)知识点:64位ubuntu18以上系统调用system函数时需要栈对齐,因为64位下的system函数有个movaps指令,这个指令要求内存地址…

​《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制德国每日风能和太阳能产量3D线图

在MATLAB中,要绘制3D线图,可以使用 plot3 函数。 在《MATLAB科研绘图与学术图表绘制从入门到精通》书中通过绘制德国每日风能和太阳能产量3D线图解释了如何在MATLAB中绘制3D线图。 购书地址:https://item.jd.com/14102657.html

读天才与算法:人脑与AI的数学思维笔记20_数学图灵测试

1. 数学图灵测试 1.1. 能不能将这种计算机证明语言翻译成易于与人交流的方式呢? 1.1.1. 剑桥大学的两位数学家蒂莫西高尔斯(Timothy Gowers)和莫汉加内萨林加姆(Mohan Ganesalingam)开展了此项研究 1.1.1.1. 他们决…

已解决SyntaxError: EOL while scanning string literal 亲测有效!!!

已解决SyntaxError: EOL while scanning string literal 亲测有效!!! 亲测有效 报错问题解决思路解决方法 报错问题 SyntaxError: EOL while scanning string literal 这个错误通常发生在Python代码中,表示字符串字面量没有被正确…

撸爆公众号流量主,简单无脑,单日变现2000+

详情介绍 目前公众号流量主的收益非常的好,不管你是小白还是老鸟,都能拿到一个很好的收益,轻轻松松日入2000,接下来我给大家带来一个保姆级的教学,大家跟着操作就可以了

360手机去除广告 360手机关闭弹窗广告 360手机刷机

360手机去除广告 360手机关闭弹窗广告 360手机刷机 360手机去广告 360手机刷机 360手机弹窗广告 永久去除360手机的各种广告教程 360手机禁止更新 360手机关闭广告 360手机去除内部广告 360手机资源网 360手机刷机资源下载链接:360rom.github.io 参考:…