在 Python 中使用 MySQL 存储过程实现事务

2023-04-05 00:00:00 python 事务 存储过程

在 Python 中使用 MySQL 存储过程实现事务需要以下步骤:
1. 连接数据库:使用 Python 的 mysql-connector 必须先安装并导入该模块,通过 connect() 方法连接数据库。

import mysql.connector
# 连接数据库
cnx = mysql.connector.connect(user='username', password='password',
                              host='localhost', database='database_name')
  1. 创建存储过程:使用 MySQL Workbench 或者命令行创建存储过程,存储过程的语法和流程与普通的 SQL 语句基本相同。
CREATE PROCEDURE transfer_funds(
    IN sender_id INT,
    IN receiver_id INT,
    IN amount DECIMAL(10, 2)
)
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    BEGIN
        ROLLBACK;
    END;
    START TRANSACTION;
    UPDATE accounts SET balance = balance - amount WHERE id = sender_id;
    UPDATE accounts SET balance = balance + amount WHERE id = receiver_id;
    COMMIT;
END;
  1. 调用存储过程:我们可以在 Python 中使用存储过程的名称和参数调用该存储过程。
# 调用存储过程
cursor = cnx.cursor()
cursor.callproc('transfer_funds', [1, 2, 100])
cnx.commit()

完整代码如下:

import mysql.connector
try:
    # 连接数据库
    cnx = mysql.connector.connect(user='username', password='password',
                                  host='localhost', database='database_name')
    # 创建游标
    cursor = cnx.cursor()
    # 调用存储过程
    cursor.callproc('transfer_funds', [1, 2, 100])
    cnx.commit()
    # 关闭游标和连接
    cursor.close()
    cnx.close()
except mysql.connector.Error as err:
    print('存储过程调用失败:', err.msg)
finally:
    # 关闭游标和连接
    cursor.close()
    cnx.close()

以上就是在 Python 中使用 MySQL 存储过程实现事务的详细步骤和代码演示,通过调用 MySQL 存储过程来实现事务可以确保多个 SQL 语句的原子性,避免了并发时的数据竞争和数据一致性问题,提高了数据库的可靠性和稳定性。

相关文章