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

http://img1.mukewang.com/62c4079a000127eb07560544.jpg

我正在尝试实现一个用户将钱转移到另一个帐户的银行交易。但是我的 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]


慕婉清6462132
浏览 182回答 1
1回答

有只小跳蛙

一种方法是首先从发送用户那里检索余额,类似于sending_user_balance = "SELECT balance FROM table WHERE account_no = <account_no>"并且仅当用户余额等于或大于发送的金额时才发送:if sending_user_balance > amount:&nbsp; &nbsp; cursorObj.execute("UPDATE transfer SET balance = balance - (?) where (account_no = (?))", (amnt, acc_no, amnt))&nbsp; &nbsp; cursorObj.execute("UPDATE transfer SET balance = balance + (?) where account_no = 847425", (amnt, ))&nbsp; &nbsp; cursorObj.execute("commit")当然,现在你可以放弃了,and balance >因为你已经检查过了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python