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;