Почему простое вычитание, приводящее к другому результату? - PullRequest
1 голос
/ 21 октября 2019

Я делаю небольшой проект веб-приложения, использующий Python Flask в качестве серверной части. Все работает нормально, но возникает небольшая странная проблема, и я не могу понять, почему это происходит.

@app.route('/buy/<string:id_val>', methods=['POST','GET'])
@is_logged_in
def buy(id_val):
    if request.method == 'POST':
        buy_amt = request.form['buy_amt']
        sell_price = request.form['sell_price']
        cur = mysql.connection.cursor()
        result = cur.execute('SELECT * from company_warehouse')
        value = cur.fetchone()
        cur.execute('SELECT * FROM distributor_warehouse WHERE cpID=%s',[id_val])
        temp = cur.fetchone()
        if temp != None:
            cur.execute('UPDATE company_warehouse SET QTY=%s WHERE cpID=%s',(str(int(value['QTY']) - int(buy_amt)),id_val))
            cur.execute('UPDATE distributor_warehouse SET QTY=%s WHERE cpID=%s',(str(int(buy_amt)+int(temp['QTY'])),id_val))
        else:
            cur.execute('UPDATE company_warehouse SET QTY=%s WHERE cpID=%s',(str(int(value['QTY']) - int(buy_amt)),id_val))
            cur.execute('INSERT INTO distributor_warehouse(cpID,QTY,COST_PRICE,SELL_PRICE) VALUES(%s,%s,%s,%s)',(id_val,buy_amt,value['PRICE_PER_UNIT'],sell_price))
        mysql.connection.commit()
        flash('Buyed Successfully','success')
        return redirect(url_for('buy_product'))
        cur.close()
    return render_template('buy_product.html')

Это мой app.py , и проблемапроисходит в str(int(value['QTY']) - int(buy_amt)) оператора UPDATE.

Это вывод, который получает

1 Ответ

2 голосов
/ 21 октября 2019

Вы всегда извлекаете первую строку из company_warehouse независимо от того, какой id_val вы получаете в качестве параметра. Изменяя это, количество будет обновляться должным образом.

cur.execute('SELECT * FROM company_warehouse WHERE cpID=%s',[id_val]) 
value = cur.fetchone()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...