我目前有两种方法可以同时调用(通过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()
答案 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
其他功能也一样。