烧瓶应用GET两次返回相同的东西

k9b*_*k9b 8 python flask

我目前有两种方法可以同时调用(通过Java中的HTTP)

出于某种原因,有一个实例,其中getAcc()返回相同的帐户信息两次?我不太明白为什么会这样.

我认为在调用toggleUse()之前第二次调用get_account是可能的(因此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()
Run Code Online (Sandbox Code Playgroud)

Kel*_*vin 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
Run Code Online (Sandbox Code Playgroud)

其他功能也是如此。