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

时间:2017-01-30 18:58:09

标签: 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()

1 个答案:

答案 0 :(得分: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

其他功能也一样。