面试题答案
一键面试import MySQLdb
def transfer_money(from_account_id, to_account_id, amount):
try:
# 连接数据库
conn = MySQLdb.connect(host='localhost', user='your_username', passwd='your_password', db='your_database')
cursor = conn.cursor()
# 开启事务
conn.autocommit(False)
# 从from_account_id账户扣除amount金额
subtract_sql = "UPDATE accounts SET balance = balance - %s WHERE account_id = %s"
cursor.execute(subtract_sql, (amount, from_account_id))
# 向to_account_id账户增加amount金额
add_sql = "UPDATE accounts SET balance = balance + %s WHERE account_id = %s"
cursor.execute(add_sql, (amount, to_account_id))
# 提交事务
conn.commit()
conn.autocommit(True)
cursor.close()
conn.close()
return True
except MySQLdb.Error as e:
# 发生错误回滚事务
if conn:
conn.rollback()
conn.autocommit(True)
print(f"操作失败: {e}")
return False
你可以使用以下方式调用这个函数:
if __name__ == "__main__":
result = transfer_money(1, 2, 100)
print(f"转账操作是否成功: {result}")
在上述代码中:
- 首先使用
MySQLdb.connect
连接到MySQL数据库。 - 通过设置
conn.autocommit(False)
开启事务。 - 执行两个
UPDATE
语句分别对两个账户进行金额的增减操作。 - 如果操作过程中没有错误,调用
conn.commit()
提交事务。 - 如果发生错误,通过
conn.rollback()
回滚事务,确保数据的一致性。 - 最后关闭游标和数据库连接,并返回操作是否成功的结果。
请根据实际的数据库配置替换host
、user
、passwd
和db
等参数。