为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2022-07-05 17:42:33
我正在尝试实现一个用户将钱转移到另一个帐户的银行交易。但是我的 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 >因为你已经检查过了。


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号