首页 >后端开发 >Python教程 >SQL 事务 - 使用 Python 提交、回滚和保存点

SQL 事务 - 使用 Python 提交、回滚和保存点

DDD
DDD原创
2025-01-20 18:35:10461浏览

在现代数据库开发中,DataGrip 等工具通过提供图形界面来提交、回滚或设置保存点,使事务处理变得更容易。

在本文中,我们将在 SQL 中定义 COMMITROLLBACKSAVEPOINT 并演示如何在使用 OracleMySQLPython 中的 PostgreSQL

关键交易概念

1.提交

定义:完成事务,使所有更改永久保存在数据库中。
用例:当事务中的所有操作都成功时使用COMMIT,确保数据库反映更改。

2.回滚

定义:恢复事务期间所做的所有更改,将数据库恢复到之前的状态。
用例:使用ROLLBACK 处理错误或撤消失败的事务。

3.保存点

定义:在事务中设置命名检查点,允许部分回滚到该点而不撤消整个事务。
用例:使用SAVEPOINT 管理多个步骤的复杂事务,在需要时有选择地回滚。

Python 和数据库事务

以编程方式使用数据库时,Python 的数据库库(例如 cx_Oracle、mysql-connector-python、psycopg2)提供显式控制事务的方法。

Python 中事务的常见步骤

  1. 启动事务:除非启用自动提交,否则自动启动连接。
  2. 执行SQL语句:执行必要的数据库操作。
  3. 提交或回滚:使用 commit() 完成更改或 rollback() 恢复更改。
  4. 使用保存点:为了更好地控制,定义并回滚到保存点(如果支持)。
示例:Python 与 Oracle 数据库的事务

设置连接

import cx_Oracle

# Connect to Oracle Database
connection = cx_Oracle.connect("user/password@localhost/XEPDB1")
cursor = connection.cursor()

使用 COMMIT 和 ROLLBACK

try:
    # Start Transaction
    cursor.execute("UPDATE Accounts SET Balance = Balance - 100 WHERE Name = 'Alice'")
    cursor.execute("UPDATE Accounts SET Balance = Balance + 100 WHERE Name = 'Bob'")

    # Commit the transaction
    connection.commit()
    print("Transaction committed successfully!")
except Exception as e:
    # Rollback in case of error
    connection.rollback()
    print(f"Transaction failed. Rolled back changes. Error: {e}")

使用保存点

try:
    # Start Transaction
    cursor.execute("UPDATE Accounts SET Balance = Balance - 200 WHERE Name = 'Alice'")
    connection.commit()

    # Savepoint
    cursor.execute("SAVEPOINT Savepoint_After_Alice")

    # Add 200 to Bob (intentional error to demonstrate rollback)
    cursor.execute("UPDATE Accounts SET Balance = Balance + 200 WHERE Name = 'Unknown'")

    # Commit if successful
    connection.commit()
except Exception as e:
    # Rollback to savepoint
    cursor.execute("ROLLBACK TO Savepoint_After_Alice")
    connection.commit()
    print(f"Rolled back to savepoint. Error: {e}")
概括

掌握这些概念可以让您在实际应用中高效管理数据库事务!


探索更多

luca1iu image

刘卢卡

你好呀! ?我是 Luca,一名对所有数据充满热情的商业智能开发人员。精通 Python、SQL、Power BI、Tableau、SAP 业务对象。

感谢您花时间与我一起探索与数据相关的见解。感谢您的参与。

?在 LinkedIn 上与我联系

SQL 事务 - 使用 Python 提交、回滚和保存点

以上是SQL 事务 - 使用 Python 提交、回滚和保存点的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn