2017-01-30 11 views
8

Tôi hiện có hai phương pháp mà tôi gọi cùng một lúc (thông qua HTTP trong Java)ứng dụng Flask GET trả lại điều tương tự hai lần

Đối với một số lý do, có một trường hợp nào getAcc() trả về các thông tin cùng một tài khoản gấp đôi ? Tôi không hoàn toàn hiểu tại sao điều này lại xảy ra.

Tôi nghĩ rằng có thể lệnh gọi get_account thứ hai đang xảy ra trước khi toggleUse() được gọi (và do đó biến IN_USE chưa được đặt thành 1). Có ai biết làm thế nào để sửa lỗi này? Tôi đã đọc xong trên web và tôi cho rằng cụm từ này là Nối tiếp. Tôi đã nhìn thấy điều này chủ yếu liên quan đến cơ sở dữ liệu, nhưng đã thấy hầu như không có tài liệu tham khảo về cách "khóa" phương pháp. Tôi có thể tạo ra một khóa và làm "với khóa:" nhưng tôi đã nghe nói đó không phải là cách để đi.

@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

Tôi nghĩ giống như Kelvin, hãy kiểm tra xem ngoại lệ trong get_account() có gọi nó là tự. Tôi đề nghị bạn sử dụng một trình gỡ lỗi, PyCharm là một IDE tốt đẹp cung cấp một máy tính trong chế độ gỡ lỗi. Bạn có thể tải xuống phiên bản cộng đồng (miễn phí). Ngoài ra, hãy chạy mã sql trong MySQL để xem có bao nhiêu dòng mà nó đang tính toán. –

+0

Phương pháp nào và thứ tự bạn đang gọi? – syntonym

Trả lời

4

Tôi sẽ phải kiểm tra, nhưng nghi ngờ bạn có vấn đề với ngoại trừ việc mở kết nối db và tự gọi.

Bạn đã cố tạo kết nối cung cấp cho bạn một hồ bơi mà bạn chỉ có thể gọi?

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 

Điều tương tự cho chức năng khác.

Các vấn đề liên quan