2017-01-30 10 views
8

Obecnie istnieją dwa sposoby, które ja nazywam jednocześnie (poprzez HTTP w Javie)aplikacja Kolba GET powrocie to samo dwa razy

Z jakiegoś powodu, nie jest przypadek, w którym getAcc() zwraca same informacje o koncie dwa razy ? Nie do końca rozumiem, dlaczego tak jest.

Myślę, że możliwe jest, że drugie wywołanie get_account dzieje się przed wywołaniem metody toggleUse() (dlatego zmienna IN_USE nie jest jeszcze ustawiona na 1). Czy ktoś wie, jak to naprawić? Zrobiłem trochę czytania w sieci i uważam, że jest to serializacja. Widziałem to głównie w odniesieniu do baz danych, ale nie widziałem prawie żadnych referencji, jak "zablokować" metodę. Mógłbym stworzyć zamek i zrobić "z zamkiem", ale słyszałem, że to nie jest droga.

@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

Myślę, że tak samo jak Kelvin, sprawdź, czy wyjątek w get_account() nazywa go self. Proponuję użyć debuggera, PyCharm to ładne IDE, które zapewnia kalkulator w trybie debugowania. Możesz pobrać wydanie społeczności (za darmo). Uruchom także kod SQL w MySQL, aby zobaczyć, ile linii jest obliczanych. –

+0

Jakie metody i w jakiej kolejności dzwonisz? – syntonym

Odpowiedz

4

Musiałbym to przetestować, ale podejrzewam, że masz problem z wyjątkiem otwierania połączenia db i wywoływania samego siebie.

Czy próbowałeś nawiązać połączenie, które zapewni Ci pulę, do której możesz zadzwonić?

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 

To samo dotyczy innej funkcji.

Powiązane problemy