网站建设优秀网站建,搜索排名,网站统计工具有哪些,郑州seo推广优化pymysql 数据库概述python对数据库的增删改查pymysql核心操作事务事务操作pymysql工具类封装每日复习ChatGPT的回答 数据库概述
分类
关系型数据库: 安全
如, mysql oracle SQLite…database tables 行列
非关系型数据库: 高效
如, redis mongoDB…数据存储结构多样 键值对… 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(host127.0.0.1, port3306, databasetext, userroot, password123456, charsetutf8)
# 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(host127.0.0.1, port3306, databasetext, userroot, password123456, charsetutf8)
# 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(host127.0.0.1, port3306, databasetext, userroot, password123456, charsetutf8)
# 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(host127.0.0.1, port3306, databasetest, userroot, password123456, charsetutf8)
# 3.创建游标(驴)
lv myConn.cursor()
# 4.核心操作: 发送sql语句(改------------------------------)
# 4.1 编写sql语句
sql update t_area set area_name嘻嘻嘻 where area_id28
# 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(host127.0.0.1, port3306, databasetest, userroot, password123456, charsetutf8)
# 3.创建游标(驴)
lv myConn.cursor()
# 4.核心操作: 发送sql语句(删------------------------------)
# 4.1 编写sql语句
sql delete from t_area where area_id28
# 4.2 执行sql
lv.execute(sql)
myConn.commit()
# 4.3 获取响应结果
print(响应结果行数:, lv.rowcount)
# 5.释放资源(先驴后桥)
lv.close()
myConn.close()pymysql核心操作事务 特征(面试常见) 原子性 事务中包含的操作被看作一个逻辑单元, 这个单元中的操作要么都成功, 要么都失败一致性 逻辑单元中的操作不应该一部分成功一部分失败孤立性 事务的中间状态对其他事务是不可见的持久性 指一个事务一旦提交成功, 它对数据库中数据的改变应该是永久性的 事务提交机制 概念 提交: commit, 将修改写入数据库回滚: rollback, 拒绝将修改写入数据库 方式 手动提交[推荐] 连接对象.commit()自动提交 创建连接时设置 autocommitTrue 事务操作 需求 向 t_area 表插入信息, 先插入A, 再插入B, 要么都成功, 要么都失败前提 MyISAM 不支持事务(旧版mysql的默认引擎)InnoDB 支持事务(较新版本mysql的默认引擎) 修改数据库引擎 执行 show ENGINES 查看当前 mysql 支持的引擎都有哪些执行 ALTER TABLE t_area ENGINEINNODB 修改表 t_area 的引擎为 InnoDB 流程 用 try 语句控制
# 1.导包
import pymysql
# 2.创建连接(桥)
myConn pymysql.Connect(host127.0.0.1, port3306, databasetest, userroot, password123456, charsetutf8)
# 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(host127.0.0.1, port3306, databasetext, userroot, password123456, charsetutf8)# 工具函数 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 属性。