满足第一个条件后执行第二个更新语句

时间:2020-01-22 11:06:55

标签: python sqlite transactions

enter image description here我正在尝试执行一项银行交易,其中一个用户将钱转移到另一个帐户。但是我的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]

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 >,因为您已经检查了它。