2017-01-30 49 views
8

Şu anda iki yöntem vardır aynı şeyi dönen GET ? Bunun neden olduğunu anlamıyorum.Matara uygulamam Nedense</p> <p>(Java HTTP üzerinden) eşzamanlı olarak diyoruz, içlerine getAcc() aynı hesap bilgilerini iki kez döndüren bir örneği var iki kez

Sanırım get_account için ikinci çağrının toggleUse() çağrılmadan önce gerçekleşmesi olasıdır (ve bu nedenle IN_USE değişkeni henüz 1 değerine ayarlanmamıştır). Bunu nasıl düzelteceğini bilen var mı? Web üzerinde biraz okuma yaptım ve terimin Serileştirme olduğuna inanıyorum. Bunu çoğunlukla veritabanlarıyla ilgili olarak görmüştüm, ancak yöntemin nasıl "kilitleneceği" konusunda neredeyse hiç referans görmedim. Bir kilit oluşturabilir ve "kilitle" yapabilirim, ama bunun gitmenin yolu olmadığını duydum.

@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

Ben Kelvin ile aynı düşünüyorum, get_account() içindeki özel durumun kendiliğinden olduğunu kontrol edin. Bir hata ayıklayıcısını kullanmanızı öneririm, PyCharm hata ayıklama modunda hesap makinesi sağlayan güzel bir IDE'dir. Topluluk sürümünü (ücretsiz) indirebilirsiniz. Ayrıca, kaç satırın hesaplandığını görmek için sql kodunu MySQL içinde çalıştırın. –

+0

Hangi yöntemleri ve hangi sırayla arıyorsunuz? – syntonym

cevap

4

Bunu test etmek için var, ama bir db bağlantısı açıp kendisini arayarak dışında aşağıdaki konularda ilgili sorun yaşanmaz şüpheli olur.

Size yalnızca arayabileceğiniz bir havuz veren bir bağlantı oluşturmaya çalıştınız mı?

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 

Diğer işlev için de aynı şey.