Выполнить второй оператор обновления после выполнения первых условий - PullRequest
0 голосов
/ 22 января 2020

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 голосов
/ 22 января 2020

Один из способов сделать это - сначала получить баланс от отправляющего пользователя, что-то вроде

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 >, потому что вы уже это проверили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...