2017-01-30 2 views
8

я в настоящее время есть два способа, которые я называю одновременно (через HTTP в Java)Колба приложение GET возвращенная же вещь дважды

По какой-то причине, есть случай, в котором getAcc() возвращает ту же информацию учетной записи в два раза ? Я не совсем понимаю, почему это так.

Я думаю, что возможно, что второй вызов get_account происходит до того, как вызывается toggleUse(), и поэтому переменная IN_USE еще не установлена ​​на 1). Кто-нибудь знает, как это исправить? Я сделал некоторые чтения в Интернете, и я считаю, что этот термин является Сериализация. Я видел это в основном в отношении баз данных, но почти не видел ссылок на то, как «заблокировать» метод. Я мог бы создать блокировку и сделать «с блокировкой:», но я слышал, что это не путь.

@app.route('/getAcc') 
def get_account(): 
    try: 
     cursor.execute("SELECT USER,PASS FROM ACCOUNTS WHERE TUT_DONE = 0 AND IN_USE = 0 LIMIT 1;") 
     return jsonify(data=cursor.fetchall()) 
    except (AttributeError, MySQLdb.OperationalError): 
     open_db() 
     return get_account() 


@app.route('/toggleUse', methods=['POST']) 
def toggle_use(): 
    try: 
     username = request.values['username'] 
     update_stmt = (
      "UPDATE ACCOUNTS SET IN_USE = !IN_USE WHERE USER = (%s)" 
     ) 
     data = (username,) 
     cursor.execute(update_stmt,data) 
     db.commit() 
     return 'Account ' + str(username) + ' IN_USE toggled' 

    except (AttributeError, MySQLdb.OperationalError): 
     open_db() 
     return toggle_use() 
+0

Я думаю, что то же самое, что и Кельвин, убедитесь, что исключение в get_account() вызывает его сам. Я предлагаю вам использовать отладчик, PyCharm - это хорошая среда разработки, которая обеспечивает калькулятор в режиме отладки. Вы можете скачать сообщество (бесплатно). Кроме того, запустите SQL-код в MySQL, чтобы узнать, сколько строк оно вычисляет. –

+0

Какие методы и в каком порядке вы звоните? – syntonym

ответ

4

Я бы, чтобы проверить это, но подозреваю, что у вас есть проблемы с вашим исключением открытия подключения к БД и называющей себя.

Вы пытались создать соединение, которое даст вам пул, который вы можете просто позвонить?

connection = pyodbc.connect(connection_string, autocommit=True) #I think you can set autocommit here. 

@app.route('/getAcc') 
def get_account(): 
    try: 
     cursor = connection.cursor() 
     cursor.execute("SELECT USER,PASS FROM ACCOUNTS WHERE TUT_DONE = 0 AND IN_USE = 0 LIMIT 1;") 
     return jsonify(data=cursor.fetchall()) 
    except (AttributeError, MySQLdb.OperationalError): 
     # Return a meaningful message 

То же самое для другой функции.

Смежные вопросы