我正在尝试实现一个用户将钱转移到另一个帐户的银行交易。但是我的 sql 语句遇到了问题。我已经声明了一个条件来检查被转移的金额是否小于余额。如果满足条件,那么只有我在更新表格。但是,即使发件人帐户中的值根本没有改变,我的第二个更新接收者帐户的表也会更新。这是我正在使用的代码:con = sqlite3.connect('Bank.db')con.isolation_level = Nonecon.execute("begin")cursorObj = con.cursor()amnt = 120000acc_no = 123456try: cursorObj.execute("UPDATE transfer SET balance = balance - (?) where (account_no = (?) and balance > (?))", (amnt, acc_no, amnt)) cursorObj.execute("UPDATE transfer SET balance = balance + (?) where account_no = 847425", (amnt, )) cursorObj.execute("commit")except con.Error: print("failed!") cursorObj.execute("rollback")cursorObj.execute("SELECT balance FROM transfer")result = cursorObj.fetchall()print(result)[![enter image description here][1]][1]
1 回答

有只小跳蛙
TA贡献1824条经验 获得超8个赞
一种方法是首先从发送用户那里检索余额,类似于
sending_user_balance = "SELECT balance FROM table WHERE account_no = <account_no>"
并且仅当用户余额等于或大于发送的金额时才发送:
if sending_user_balance > amount:
cursorObj.execute("UPDATE transfer SET balance = balance - (?) where (account_no = (?))", (amnt, acc_no, amnt))
cursorObj.execute("UPDATE transfer SET balance = balance + (?) where account_no = 847425", (amnt, ))
cursorObj.execute("commit")
当然,现在你可以放弃了,and balance >因为你已经检查过了。
添加回答
举报
0/150
提交
取消