我正在尝试执行一项银行交易,其中一个用户将钱转移到另一个帐户。但是我的sql语句面临问题。
我已声明要检查转移金额是否少于余额的条件。如果满足条件,则只有我要更新表。但是,即使发件人帐户中的值完全没有变化,更新收件人帐户的第二张表也会更新。这是我正在使用的代码:
con = sqlite3.connect('Bank.db')
con.isolation_level = None
con.execute("begin")
cursorObj = con.cursor()
amnt = 120000
acc_no = 123456
try:
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]
答案 0 :(得分:0)
执行此操作的一种方法是先从发送用户处提取余额,类似...
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 >
,因为您已经检查了它。