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

Mysql基础 03 pymysql库、事务命令

文章目录

  • 一、pymysql库
  • 二、事务命令

一、pymysql库

python关于mysql的API用pymysql库实现。pymysql是Python中操作MySQL的模块。先安装该模块:conda install pymysql


import pymysql

#添加数据
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='s3')

cursor = conn.cursor()

sql = "create table test (id int, name varchar(20))"
sql = "insert into test values(1,'A1'),(2,'A2')"

ret = cursor.execute(sql)   # 执行Sql语句
print(ret)  # 返回影响的行数
import pymysql

#添加数据
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='s3')

cursor = conn.cursor()

# sql = "insert into test values(1,'A1'),(2,'A2')"
sql = "update test set name='BB' where id =1"

ret = cursor.execute(sql)   # 执行Sql语句

conn.commit()   # 插入/更新数据后,需要提交,数据库才能保存该数据
cursor.close()  # 关闭游标
conn.close()    # 关闭数据库连接
import pymysql

#查询数据
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='s3')

cursor = conn.cursor()

cursor.execute("select * from test")    # 需要先执行该语句,才能执行后续语句

one = cursor.fetchone()     # 查询游标后一条记录
print(one)

many = cursor.fetchmany(2)  # 查询游标后两条语句
print(many)

all = cursor.fetchall()     # 查询游标后,所有语句
print(all)

conn.commit()   # 插入/更新数据后,需要提交,数据库才能保存该数据
cursor.close()  # 关闭游标
conn.close()    # 关闭数据库连接
import pymysql

#查询数据
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='s3')

cursor = conn.cursor()

cursor.execute("SELECT * FROM TEST")    # 需要先执行该语句,才能执行后续语句

one=cursor.fetchone()
print(one)

cursor.scroll(-1,mode='relative')  # 相对当前位置,向前移动1行
one=cursor.fetchone()
print(one)

cursor.scroll(3,mode='absolute') # 绝对位置移动,移动到第3行结尾
one=cursor.fetchone()   # 显示第4行
print(one)

conn.commit()   # 插入/更新数据后,需要提交,数据库才能保存该数据
cursor.close()  # 关闭游标
conn.close()    # 关闭数据库连接
import pymysql

# 查询数据
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='s3')

# 更改获取数据结果的数据类型,默认是元组,可以改为字典
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

cursor.execute("SELECT * FROM TEST")    # 需要先执行该语句,才能执行后续语句

one=cursor.fetchone()
print(one)  # 显示字典形式

conn.commit()   # 插入/更新数据后,需要提交,数据库才能保存该数据
cursor.close()  # 关闭游标
conn.close()    # 关闭数据库连接

二、事务命令

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。

start transaction 开启事务。

Rollback 回滚事务,即撤销指定的sql语句(只能回退insert delete update语句),回滚到上一次commit的位置。

Commit 提交事务,提交未存储的事务。

savepoint 保留点 ,事务处理中设置的临时占位符 你可以对它发布回退(与整个事务回退不同)

create table account (
    id int primary key auto_increment,
    name varchar(8),
    balance int
);

insert into account (name,balance) values
                                     ("AA",8000),
                                     ("BB",8000);

select * from account;

start transaction;

update account set balance=balance-5000 where id=1;

select * from account; -- 此时如果重开一个会话框,并不会更新数据

Rollback;   -- 就算不新开会话框,如果执行事务回滚语句,也不会更新数据。
start transaction;

update account set balance=balance-5000 where id=1;

select * from account;

update account set balance=balance+5000 where id=2;

commit; -- 提交后,数据更新永久改变。

python中调用数据库启动事务的方式

import pymysql

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='s3')

cursor = conn.cursor()

try:
    insertSQL0 = "INSERT INTO ACCOUNT (name,balance) VALUES ('CC',4000)"
    insertSQL1="UPDATE account set balance=balance-30 WHERE id=1"
    insertSQL2="UPDATE account set balance=balance+30 WHERE id=2"
    cursor = conn.cursor()

    cursor.execute(insertSQL0)
    conn.commit()

    cursor.execute(insertSQL1)
    # raise Exception
    cursor.execute(insertSQL2)
    conn.commit()

except Exception as e:
    conn.rollback()
    conn.commit()

cursor.close()
conn.close()

savepoint示例:

start transaction;

update account set balance=balance-5000 where id=1;

savepoint update1; -- 保留点可以任意起名

update account set balance=balance+5000 where id=2;

savepoint update2;

delete from account where name="DD";

savepoint delete1;

select * from account;
rollback to delete1;    -- 回滚到savepoint delete1;这句之上,即没有任何变化

rollback to update2;    -- 取消删除语句,及以下的语句
select * from account;

rollback to update1;    -- 取消第二条更新语句,及以下的语句
select * from account;

http://www.kler.cn/a/386611.html

相关文章:

  • 栈相关算法题1|通过栈判断链表是否对称|共享栈入栈出栈|括号匹配|多种括号配对|递归求序列最大值(C)
  • 【Zabbix自动化运维监控系列】判断zabbix是主动监控,还是被动监控
  • 网络原理-网络层和数据链路层
  • 摄像机视频分析软件下载LiteAIServer视频智能分析软件抖动检测的技术实现
  • CSS的综合应用例子(网页制作)
  • SQL面试题——蚂蚁SQL面试题 会话分组问题
  • 多个NVR同时管理EasyNVR多品牌NVR管理工具/设备:IP常见问题解决方案
  • Ubuntu 安装yum遇坑
  • Android 重新定义一个广播修改系统时间,避免系统时间混乱
  • Redis 的线程模型
  • 【卷积基础】CNN中一些常见卷积(1*1卷积、膨胀卷积、组卷积、深度可分离卷积)
  • 快速学习Django框架以开发Web API
  • Django 框架:全方位技术分析
  • Linux如何更优质调节系统性能
  • 【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析
  • 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
  • 论文阅读-Event-based Visible and Infrared Fusion via Multi-task Collaboration
  • 机器学习,生成式AI ,LLM大模型,人工智能,他们之间的关系是什么?有什么不同?
  • uni-app 实现自定义底部导航
  • 数据库的使用02:SQLServer的连接字符串、备份、还原、SQL监视相关设置
  • 算法训练(leetcode)二刷第二十天 | 93. 复原 IP 地址、78. 子集、90. 子集 II
  • LeetCode34:在排序数组中查找元素第一个和最后一个位置
  • 创新引领,模块化微电网重塑能源格局
  • 使用开源Embedding模型嵌入高维空间向量
  • 设计模式之——单例模式
  • Golang--网络编程