升级! 测试萌新Python学习之连通数据库Pymsql增删改及封装(四)
pymysql
- 数据库概述
- python对数据库的增删改查
- pymysql核心操作事务
- 事务操作
- pymysql工具类封装
- 每日复习
- ChatGPT的回答
数据库概述
分类
关系型数据库: 安全
- 如, mysql oracle SQLite…
- database tables 行+列
非关系型数据库: 高效
- 如, redis mongoDB…
- 数据存储结构多样 键值对, 列表, 字符串…
python操作数据库
第一步导包
python(等各种编程语言)本身不具备直连数据库的功能, 必须导入第三方包
在线安装
-
命令行运行 pip install pymysql 回车
-
出现 Successfully installed xxxx 字样, 代表安装成功
-
校验
- 命令行运行 pip list 回车
- 列表中查找到 pymysql 和 版本号 就说明安装成功
第二步连接流程
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn = pymysql.Connect(host="127.0.0.1", port=3306, database="text", user="root", password="123456", charset="utf8")
# 3.创建游标(驴)
lv = myConn.cursor()
print("桥", myConn)
print("驴", lv)
# 4.核心操作: 发送sql语句
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()
连接成功
python对数据库的增删改查
查
-
- 编写sql语句
-
- 执行sql语句 游标对象.execute(要执行的语句)
- \3. 获取响应结果
- 获取响应结果行数 游标对象.rowcount
- 逐行获取数据 游标对象.fetchone()返回一个元组
- 获取所有数据 游标对象.fetchall(返回一个元组
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn = pymysql.Connect(host="127.0.0.1", port=3306, database="text", user="root", password="123456", charset="utf8")
# 3.创建游标(驴)
lv = myConn.cursor()
# 4.核心操作: 发送sql语句(查询)
# 4.1 编写sql语句
sql = "SELECT * FROM t_area"
# 4.2 执行sql
lv.execute(sql)
# 4.3 获取响应结果
# 4.3.1 获取相应结果行数
print("响应结果行数:", lv.rowcount)
# 4.3.2 逐行获取数据
# row1 = lv.fetchone()
# row2 = lv.fetchone()
# row3 = lv.fetchone()
# row4 = lv.fetchone()
# row5 = lv.fetchone()
# print("第1行数据:", row1)
# print("第2行数据:", row2)
# print("第3行数据:", row3)
# print("第4行数据:", row4)
# print("第5行数据:", row5)
# 4.3.3 获取所有数据
rows = lv.fetchall()
print("所有数据:", rows)
for row in rows:print("每一条:", row)print("id", row[0])print("区域名称", row[1])print("优先级", row[2])print("创建时间", row[3])print("更新时间", row[4])
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()
增
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn = pymysql.Connect(host="127.0.0.1", port=3306, database="text", user="root", password="123456", charset="utf8")
# 3.创建游标(驴)
lv = myConn.cursor()
# 4.核心操作: 发送sql语句(增------------------------------)
# 4.1 编写sql语句
sql = "insert into t_area(area_name, priority) values('咚咚咚', '123')"
# 4.2 执行sql
lv.execute(sql)
myConn.commit()
# 4.3 获取响应结果
print("响应结果行数:", lv.rowcount)
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()
改
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn = pymysql.Connect(host="127.0.0.1", port=3306, database="test", user="root", password="123456", charset="utf8")
# 3.创建游标(驴)
lv = myConn.cursor()
# 4.核心操作: 发送sql语句(改------------------------------)
# 4.1 编写sql语句
sql = "update t_area set area_name='嘻嘻嘻' where area_id=28"
# 4.2 执行sql
lv.execute(sql)
myConn.commit()
# 4.3 获取响应结果
print("响应结果行数:", lv.rowcount)
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()
删除
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn = pymysql.Connect(host="127.0.0.1", port=3306, database="test", user="root", password="123456", charset="utf8")
# 3.创建游标(驴)
lv = myConn.cursor()
# 4.核心操作: 发送sql语句(删------------------------------)
# 4.1 编写sql语句
sql = "delete from t_area where area_id=28"
# 4.2 执行sql
lv.execute(sql)
myConn.commit()
# 4.3 获取响应结果
print("响应结果行数:", lv.rowcount)
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()
pymysql核心操作事务
-
特征(面试常见)
- 原子性 事务中包含的操作被看作一个逻辑单元, 这个单元中的操作要么都成功, 要么都失败
- 一致性 逻辑单元中的操作不应该一部分成功一部分失败
- 孤立性 事务的中间状态对其他事务是不可见的
- 持久性 指一个事务一旦提交成功, 它对数据库中数据的改变应该是永久性的
-
事务提交机制
- 概念
- 提交: commit, 将修改写入数据库
- 回滚: rollback, 拒绝将修改写入数据库
- 方式
- 手动提交[推荐] 连接对象.commit()
- 自动提交 创建连接时设置 autocommit=True
事务操作
- 需求 向 t_area 表插入信息, 先插入A, 再插入B, 要么都成功, 要么都失败
- 前提
- MyISAM 不支持事务(旧版mysql的默认引擎)
- InnoDB 支持事务(较新版本mysql的默认引擎)
- 修改数据库引擎
- 执行 show ENGINES 查看当前 mysql 支持的引擎都有哪些
- 执行 ALTER TABLE t_area ENGINE=INNODB 修改表 t_area 的引擎为 InnoDB
- 流程 用 try 语句控制
- 概念
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn = pymysql.Connect(host="127.0.0.1", port=3306, database="test", user="root", password="123456", charset="utf8")
# 3.创建游标(驴)
lv = myConn.cursor()
# 4.核心操作: 发送sql语句(事务------------------------------)
try:sql1 = "insert into t_area(area_name, priority) values('咚咚咚', '111')"sql2 = "insert into t_area(area_name, priority) values('嘻嘻嘻', '222')"# 执行sql1(插入数据A)lv.execute(sql1)# 执行sql2(插入数据B)lv.execute(sql2)# 提交(写入数据库)myConn.commit()
except Exception as e:print("error:", e)# 回滚(拒绝写入数据库)myConn.rollback()
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()
pymysql工具类封装
将获取连接, 获取游标, 以及释放资源这些重复性操作, 进行封装, 需要时, 再调用
"""
实现封装:将 pymysql 的常见用法实现封装进一个专门工具类封装的功能: 1.获取连接 2.获取游标 3.释放资源
"""
import pymysql
class DBUtils:# 工具函数 1.获取连接@classmethoddef get_conn(cls):return pymysql.Connect(host="127.0.0.1", port=3306, database="text", user="root", password="123456", charset="utf8")# 工具函数 2.获取游标@classmethoddef get_cursor(cls, conn):return conn.cursor()# 工具函数 3.释放资源@classmethoddef close_res(cls, cursor, conn):if cursor:cursor.close()if conn:conn.close()
"""
实现调用:以查询数据库为例, 调用工具类中封装的功能
"""
# 导包
from pymysql_19 import DBUtils
# 调用获取连接的工具函数
conn = DBUtils.get_conn()
# 调用获取游标的工具函数
lv = DBUtils.get_cursor(conn)
# 核心: 查询为例
sql = "select * from t_area"
lv.execute(sql)
print(lv.fetchall())
# 调用释放资源的工具函数
DBUtils.close_res(lv, conn)
每日复习
-
能够说出python使用pymysql操作数据库的流程?
-
使用pymysql做mysql的增删改查操作, 编码步骤有哪些?
-
实际编写代码完成增删改查的操作?(提交4个脚本)
-
用举例来说明什么是事务?
-
[面试题]事务有哪些特征?
ChatGPT的回答
好的,让我用一个简单的例子来说明什么是事务。
假设你在银行有两个账户:账户 A 和账户 B。你想要从账户 A 转账 100 美元到账户 B。这个过程涉及两个步骤:
1.从账户 A 中减去 100 美元。
2.将这 100 美元存入账户 B。
在数据库术语中,这两个步骤称为数据库操作。而将它们作为一个整体进行处理的过程就称为事务。
现在,让我们看看事务的属性:
3.原子性(Atomicity):事务应该是原子的,意味着它们应该被视为一个单独的、不可分割的工作单元。在我们的例子中,原子性意味着要么账户 A 减去 100 美元,同时账户 B 增加 100 美元,要么两者都不发生。不会出现只有一个账户发生了变化的情况。
4.一致性(Consistency):事务执行后,数据库应该处于一致的状态。在我们的例子中,这意味着账户 A 和账户 B 的总金额应该保持不变。即使在转账过程中发生了故障,数据库也应该能够通过回滚来保持一致性。
5.隔离性(Isolation):事务的执行应该是隔离的,即一个事务的执行不应该受到其他事务的影响。在我们的例子中,如果同时有另一个转账事务正在进行,它不应该影响我们当前的转账事务。这意味着每个事务应该像在单独的环境中执行一样。
6.持久性(Durability):一旦事务被提交,其结果应该是永久性的,即使系统发生故障。在我们的例子中,一旦转账事务完成并提交,账户 A 和账户 B 的余额变化应该是永久性的,即使系统在此之后发生故障,这两个账户的余额也不应该恢复到转账前的状态。
和账户 B 的总金额应该保持不变。即使在转账过程中发生了故障,数据库也应该能够通过回滚来保持一致性。
5.隔离性(Isolation):事务的执行应该是隔离的,即一个事务的执行不应该受到其他事务的影响。在我们的例子中,如果同时有另一个转账事务正在进行,它不应该影响我们当前的转账事务。这意味着每个事务应该像在单独的环境中执行一样。
6.持久性(Durability):一旦事务被提交,其结果应该是永久性的,即使系统发生故障。在我们的例子中,一旦转账事务完成并提交,账户 A 和账户 B 的余额变化应该是永久性的,即使系统在此之后发生故障,这两个账户的余额也不应该恢复到转账前的状态。
综上所述,事务是数据库管理系统中用来确保数据的完整性和一致性的重要概念。在数据库中执行的每个操作都应该被认为是一个事务,并且应该满足事务的 ACID 属性。
相关文章:

升级! 测试萌新Python学习之连通数据库Pymsql增删改及封装(四)
pymysql 数据库概述python对数据库的增删改查pymysql核心操作事务事务操作pymysql工具类封装每日复习ChatGPT的回答 数据库概述 分类 关系型数据库: 安全 如, mysql oracle SQLite…database tables 行列 非关系型数据库: 高效 如, redis mongoDB…数据存储结构多样 键值对…...
【大数据】containered学习笔记
文章目录 1. Containerd安装1.1 YUM方式安装 【后端&网络&大数据&数据库目录贴】 1. Containerd安装 1.1 YUM方式安装 获取YUM源 获取阿里云YUM源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 查…...

「TypeScript」TypeScript入门练手题
前言 TypeScript 越来越火,现在很多前端团队都使用它,因此咱们前端码农要想胜任以后的前端工作,就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …...

k8s 使用Docker和Containerd对比分析
目录 k8s 使用Docker和Containerd对比分析 互动1:docker build构建的镜像和containerd镜像通用吗? 互动2:k8s1.24之前版本和1.24及1.24之后版本区别? k8s 使用Docker和Containerd对比分析 如果你使用Docker作为K8S容器运行时的…...

MySQL 通过 systemd 启动时 hang 住了……
mysqld:哥,我起不来了…… 作者:贲绍华,爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…...
pat乙1033-旧键盘打字
1测试点2: 输入的字符串如果为空,要用getline(cin,s),而不是cin>>s,否则程序做不了 2题目说的如果上键坏了那大写字母打印不了,不是大写转小写打印啦,认真读题 3两个for循环长这样,break…...

Ubuntu安装VScode
Ubuntu安装VScode 前言: 1、Ubuntu安装VScode比较方便 2、我更喜欢source insight 1、获取到linux版本的VScode安装包 VSCode 下载地址是:https://code.visualstudio.com/ 2、得到安装包 3、复制到ubuntu中,使用命令安装 sudo dpkg -i cod…...

c# - - - winform程序四个角添加圆角效果
winform 给窗体四个角添加圆角效果。 在窗体 Load 事件中添加如下代码: // 创建了一个圆角矩形的路径,并将其设置为控件的形状 System.Drawing.Drawing2D.GraphicsPath path new System.Drawing.Drawing2D.GraphicsPath(); int radius 30; path.AddAr…...

Springboot 集成 Consul 实现服务注册中心-05
因为后续很多模块都要用到注册中心,所以此处先实现此模块。 Consul简介 Consul是一个开源的服务发现和配置管理工具,具有跨平台、运行高效等特点。它由HashiCorp公司开发,并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康…...

【软考高项】四十六、项目管理科学计算之运筹学
1、线性规划问题 解题思路: 先把文字转化成图表 最快方式应该是把第一题的4个答案直接代入计算,很快得知X2时利润最大。 A0时,利润5*630 A2时,利润2*25*634 A4时,利润4*23*523 A6时,利润4*2(因为甲的…...

使用 Python 和 OpenCV 进行实时目标检测的详解
使用到的模型文件我已经上传了,但是不知道能否通过审核,无法通过审核的话,就只能 靠大家自己发挥实力了,^_^ 目录 简介 代码介绍 代码拆解讲解 1.首先,让我们导入需要用到的库: 2.然后,设…...

Android build.prop生成过程源码分析
Android的build.prop文件是在Android编译时刻收集的各种property【LCD density/语言/编译时间, etc.】;编译完成之后,文件生成在out/target/product/<board【OK1000】>/system/目录下;在Android运行时刻可以通过property_get()[c/c域] …...
计算机网络教材——谢希仁教材与配套PPT课件和《计算机网络——自顶向下方法》
教材链接: https://pan.baidu.com/s/1MUkgTVNMvhFdkGxAd0U7Ew?pwdn3g4 提取码: n3g4 ppt资源:课程包列表 (51zhy.cn) 计算机网络——自顶向下方法(资源在下面的评论区里):计算机网络自顶向下方法第7版中文PDF习题参考 - 哔哩哔…...

mysql 离线安装
package download mysql https://dev.mysql.com/downloads/mysql/ libaio http://mirror.centos.org/centos/7/os/x86_64/Packages/libaio-0.3.109-13.el7.x86_64.rpm 根据自己服务器选择下载对应的安装包及依赖 删除本机自带mysql相关 # 首先排查服务器自身是否有安装对应m…...

【C++】 string类:应用与实践
💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…...

巩固学习7
正则表达式 就是用来找到符合模式的字符串,这些模式包括:是什么字符,重复多少次,在什么位置,有哪些额外的约束 找某个字符串 import re text身高:178 体重:168 学号:123456 密码:9527 #在Python中,r前缀用…...

Android 右键 new AIDL 无法选择
提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file) 解决方式: 在app的build.gradl中 adnroid{} 添加: buildFeatures{aidl true}...
使用Springboot整合Elasticsearch
全文搜索引擎 全文搜索引擎是目前广泛应用的主流搜索引擎,也称为全文检索。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序…...
Vue3+Element+TS动态菜单+按钮权限控制实现探索
1.动态获取权限并根据获取权限转换成相对应的router 根据请求获取菜单数据,对菜单数据进行转换,分别进行下面几步: /*** 组件地址前加斜杠处理*/ export function addSlashToRouteComponent(routeList: AppRouteRecordRaw[]) {routeList.fo…...

五款公司源代码加密软件推荐|代码防泄密解决方案
在当今数字化的世界中,源代码的泄露无疑是一场灾难。对于依赖加密软件保护关键信息的企业和个人来说,这种泄露不仅可能导致数据失窃,还可能损害企业的声誉和客户的信任。面对这种严峻的形势,我们迫切需要一种全面而有效的加密软件…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...