升级! 测试萌新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对数据库的增删改查

    1. 编写sql语句
    1. 执行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 属性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串函数(一):strcpy(拷贝),strcat(追加),strcmp(比较),及strncpy,strncat,strncmp

字符串函数 一.strcpy(字符串拷贝)1.函数使用2.模拟实现 二.strcat(字符串追加)1.函数使用2.模拟实现 三.strcmp(字符串比较)1.函数使用2.模拟实现 四.strncpy1.函数使用2.模拟实现 五.strncat1.函数使用2.…

汇昌联信电商:拼多多新手怎么做店铺的免费流量会慢慢起来?

在拼多多上开店,新手们往往面临着如何吸引免费流量的挑战。毕竟,流量是店铺生存和发展的血脉,没有流量,就没有销量,店铺也就失去了生命力。那么,作为拼多多新手,如何做才能让店铺的免费流量慢慢…

前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽

🔥 个人主页:空白诗 文章目录 引言 👋一、Nginx简介 📚二、常见的Web服务器架构 🌀📌 架构概述📌 Nginx的深入探讨 三、正向代理与反向代理 🔮📌 正向代理工作原理&#…

通用型产品发布解决方案(后端环境搭建)

文章目录 后端renren脚手架配置1.解压后放到项目目录下2.新建商品模块1.创建一个新模块 sunliving-commodity2.删除两个不必要的文件3.pom.xml 引入依赖 3.maven进行聚合管理1.将刚才配置的pom.xml文件复制到父项目下并进行修改2.手动将这个pom.xml加入项目(如果右下…

自定义类型——结构体、枚举和联合

自定义类型——结构体、枚举和联合 结构体结构体的声明匿名结构体结构体的自引用结构体的初始化结构体的内存对齐修改默认对齐数结构体传参 位段枚举联合 结构体 结构是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同类型的变量。 数组是…

【面试经典题】环形链表

个人主页:一代… 个人专栏:数据结构 在面试中我们经常会遇到有关链表的相关题目,面试官通常会对题目给出拓展 下面我就两个leetcode上的一个双指针的题目为例,并对其进行拓展 题目链接:环形链表 题目描述&#xf…

Java抽象类:为何它是你代码架构的基石?

目录 1、抽象类的概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 5、 完结散花 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克…

人脸消费给传统食堂带来的变化

消费的技术基础是脸部识别,脸部识别是基于人的容貌特征信息进行认证的生物特征识别技术,其突出的特征是以非接触方式进行识别,避免个人信息的泄露。 面部识别和指纹识别、掌纹识别、视网膜识别、骨骼识别、心率识别等都是人体生物特征识别技术…

【C语言/数据结构】栈:从概念到两种存储结构的实现

目录 一、栈的概念 二、栈的两种实现方式 1.顺序表实现栈 2.链表实现栈 三、栈的顺序存储结构及其实现 1.栈的声明 2.栈的初始化 3.栈的销毁 4.栈的压栈 5.栈的弹栈 6.栈的判空 7.返回栈顶元素 8.返回栈的长度 四、栈的链式存储结构及其实现 1.栈的声明 2.栈的…

【SRC实战】前端脱敏信息泄露

挖个洞先 https://mp.weixin.qq.com/s/xnCQQCAneT21vYH8Q3OCpw “ 以下漏洞均为实验靶场,如有雷同,纯属巧合 ” 01 — 漏洞证明 一、前端脱敏,请求包泄露明文 “ 前端脱敏处理,请求包是否存在泄露? ” 1、获取验…

3.整数运算

系列文章目录 信息的表示和处理 : Information Storage(信息存储)Integer Representation(整数表示)Integer Arithmetic(整数运算)Floating Point(浮点数) 文章目录 系列文章目录前…

钟表——蓝桥杯十三届2022国赛大学B组真题

问题分析 这个问题的关键有两点:1.怎么计算时针,分针,秒针之间的夹角,2.时针,分针,秒针都是匀速运动的,并非跳跃性的。问题1很好解决看下面的代码就能明白,我们先考虑问题2&#xf…

Springboot+Vue项目-基于Java+MySQL的车辆管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Rx(Reactive Extensions)的由来

既然我们已经介绍了响应式编程,现在是时候了解我们的明星了:响应式扩展,通常简称为Rx。微软开发了Reactive扩展库,使其易于处理事件流和数据流。在某种程度上,时变值本身就是一个事件流;每个值更改都是一种类型的事件它会更新依赖…

Vue中使用$t(‘xxx‘)实现中英文切换;

(原文链接) 介绍 {{$t(key)}} :是VueI18n插件提供的函数,主要用于根据当前语言环境返回对应的翻译文本,以便在页面上显示多语言内容。 key:作为参数传递给函数$t()的字符串,用于指定需要翻译的…

【C++要哮着学】初识C++,什么是C++?什么是命名空间?什么又是缺省函数?

文章目录 前言1、C简介1.1、什么是C1.2、C起源1.3、C发展 2、C关键字(C98)3、命名空间3.1、命名空间的定义及使用3.2、命名空间的嵌套3.3、命名空间的三种使用方式3.3.1、加命名空间名称及作用域限定符3.3.2、使用using将命名空间中某个成员引入3.3.3、使…

MySQL 通过 systemd 启动时 hang 住了……

mysqld:哥,我起不来了…… 作者:贲绍华,爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

【Docker学习】重启容器的docker restart

命令: docker container restart 描述: 重启一个或多个容器 用法: docker container restart [OPTIONS] CONTAINER [CONTAINER...] 别名: docker restart(docker的一些命令可以简写,docker restart就等同于docker cont…

SQLZOO:The JOIN operation

数据表:game-gaol-eteam game idmdatestadiumteam1team210018 June 2012National Stadium, WarsawPOLGRE10028 June 2012Stadion Miejski (Wroclaw)RUSCZE100312 June 2012Stadion Miejski (Wroclaw)GRECZE100412 June 2012National Stadium, WarsawPOLRUS... goal …

UE4_照亮环境_不同雾效的动态切换

一、问题及思路: 我们在一个地图上,经常切换不同的区域,不同的区域可能需要不同的色调,例如暖色调的野外或者幽暗的山洞,这两种环境上,雾效的选用肯定不一样,夕阳西下的户外用的就是偏暖的色调&…