MST

星途 面试题库

面试题:Python数据库事务处理

在Python的数据库编程中,假设要对银行账户进行转账操作,从账户A向账户B转100元。账户信息存储在`accounts`表中,包含`account_id`、`balance`字段。请使用Python代码实现这个转账操作,并确保使用数据库事务机制,以保证操作的原子性。若出现异常,能正确回滚事务。
48.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

假设使用sqlite3数据库,以下是示例代码:

import sqlite3


def transfer():
    conn = sqlite3.connect('bank.db')
    cursor = conn.cursor()
    try:
        # 开启事务
        conn.execute('BEGIN')
        # 从账户A减去100元
        cursor.execute('UPDATE accounts SET balance = balance - 100 WHERE account_id = "A"')
        # 向账户B增加100元
        cursor.execute('UPDATE accounts SET balance = balance + 100 WHERE account_id = "B"')
        # 提交事务
        conn.execute('COMMIT')
        print("转账成功")
    except Exception as e:
        # 回滚事务
        conn.execute('ROLLBACK')
        print(f"转账失败,原因: {e}")
    finally:
        conn.close()


if __name__ == "__main__":
    transfer()
  1. 上述代码使用sqlite3模块连接到数据库bank.db
  2. 开启事务后,先对账户A进行减法操作,再对账户B进行加法操作。
  3. 如果执行过程中没有异常,提交事务;若出现异常,回滚事务以确保数据的一致性。
  4. 最后关闭数据库连接。

注意:实际应用中,account_id和数据库名称等应根据实际情况调整,同时也可根据需求更换数据库驱动,如pymysql用于MySQL数据库等,不同数据库驱动在语法和使用方式上会略有不同。