面试题答案
一键面试假设使用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()
- 上述代码使用
sqlite3
模块连接到数据库bank.db
。 - 开启事务后,先对账户A进行减法操作,再对账户B进行加法操作。
- 如果执行过程中没有异常,提交事务;若出现异常,回滚事务以确保数据的一致性。
- 最后关闭数据库连接。
注意:实际应用中,account_id
和数据库名称等应根据实际情况调整,同时也可根据需求更换数据库驱动,如pymysql
用于MySQL数据库等,不同数据库驱动在语法和使用方式上会略有不同。