Python PyMySQL 事务
什么是事务?
在数据库中,事务是指一系列的数据库操作,它们作为一个逻辑单元执行,要么全部成功执行,要么全部失败回滚。事务的目的是确保数据库的一致性和完整性。
在实际应用中,有些操作可能需要同时修改多个表,并且要保证这些修改要么全部成功,要么全部失败,以避免数据不一致的情况。这时就需要使用事务来确保这一点。
PyMySQL
PyMySQL 是一个用于连接 MySQL 数据库的第三方库,它提供了一个方便的接口来执行 SQL 语句并操作数据库。
要使用 PyMySQL,首先需要安装它。可以通过以下命令来安装:
pip install pymysql
安装完成后,可以通过以下代码导入 PyMySQL:
import pymysql
开启事务
在 PyMySQL 中,要开启一个事务,首先需要获取到数据库连接,并将其设置为自动提交模式为 False。然后可以通过 begin()
或 start_transaction()
方法来开启事务。
下面的示例代码展示了如何开启一个事务:
# 建立数据库连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='test', autocommit=False)
# 获取游标
cursor = conn.cursor()
# 开启事务
conn.begin()
在 begin()
或 start_transaction()
方法后面的代码将会被包含在事务中。
提交事务
一旦事务中的所有操作都执行成功,可以通过 commit()
方法来提交事务。提交事务会将所有的修改保存到数据库中,并将连接的自动提交模式设置为 True。
下面的代码展示了如何提交一个事务:
# 执行事务中的 SQL 语句
cursor.execute("INSERT INTO table1 VALUES (1, 'A')")
cursor.execute("UPDATE table2 SET name='B' WHERE id=2")
# 提交事务
conn.commit()
在 commit()
方法调用后,事务中的所有操作将会被提交到数据库。
回滚事务
如果事务中的某个操作执行失败,可以通过 rollback()
方法来回滚事务。回滚事务会撤销事务中的所有修改,并将连接的自动提交模式设置为 True。
下面的代码展示了如何回滚一个事务:
try:
# 执行事务中的 SQL 语句
cursor.execute("INSERT INTO table1 VALUES (1, 'A')")
cursor.execute("UPDATE table2 SET name='B' WHERE id=2")
# 提交事务
conn.commit()
except:
# 回滚事务
conn.rollback()
在 rollback()
方法调用后,事务中的所有操作将会被撤销。
事务的自动提交模式
在 PyMySQL 中,连接的自动提交模式决定了每个 SQL 语句是否自动提交。如果自动提交模式为 True,则每个 SQL 语句都会自动提交;如果自动提交模式为 False,则需要手动调用 commit()
方法来提交事务。
可以通过以下代码来设置连接的自动提交模式:
# 设置自动提交模式为 True
conn.autocommit(True)
# 设置自动提交模式为 False
conn.autocommit(False)
事务的隔离级别
在数据库中,事务的隔离级别决定了不同事务之间的可见性和并发控制的程度。PyMySQL 默认使用的是可重复读(REPEATABLE READ)的隔离级别。
可以通过以下代码来设置事务的隔离级别:
# 设置事务的隔离级别为读未提交(READ UNCOMMITTED)
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
# 设置事务的隔离级别为读已提交(READ COMMITTED)
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")
# 设置事务的隔离级别为可重复读(REPEATABLE READ)
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ")
# 设置事务的隔离级别为串行化(SERIALIZABLE)
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE")
``