MySQL通过多个请求给出错误的结果

时间:2018-11-05 16:02:12

标签: python mysql flask

我写了一个flask api,可以从mysql数据库返回结果并可以输入结果。将一些数据输入数据库后,api从表中返回错误的输出。进入表的代码是这样的:

@app.route('/insertscore')
def insert_score():
    checkstring = "SHOW TABLES LIKE %s"  
    checkcursor = mydb.cursor(buffered=True)
    checkcursor.execute(checkstring, (request.args['key'],), multi=False)
    rowcount = checkcursor.rowcount
    checkcursor.close()
    if (rowcount > 0): 
        string = 'insert into {}'.format(request.args['key']) + ' values (%s,%s)'
        insertcursor = mydb.cursor(buffered=True)
        insertcursor.execute(string, (request.args['name'], request.args['score'],))
        mydb.commit()
        insertcursor.close()
        return Response("success", status=200)
    else: 
        return "notfound"

我认为db.commit()将最终确定结果,但其他函数返回的结果却有所不同。这是另一个检索分数的功能:

@app.route('/get')
def gethighscorelist():
    checkstring = "SHOW TABLES LIKE %s"  
    checkcursor = mydb.cursor(buffered=True)
    checkcursor.execute(checkstring, (request.args['key'],))
    rowcount = checkcursor.rowcount
    checkcursor.close()
    if (rowcount > 0): 
        getstring = 'SELECT * FROM {}'.format(request.args['key']) + ' ORDER BY CAST(score AS unsigned) DESC limit 5'
        print(getstring)
        getcursor = mydb.cursor(buffered=True)
        getcursor.execute(getstring)
        topscores = getcursor.fetchall()
        getcursor.close()
        print(topscores)
        json_data = []
        #field_names = [i[0] for i in getcursor.description]
        field_names = [u'name', u'score']
        print(field_names)
        for result in topscores:
            json_data.append(dict(zip(field_names, result)))
        print("about to return")
        print(json_data)
        return Response(json.dumps(json_data), status=200)
        #return str(paid(getTable))
    else: 
        return "notfound"

这是get函数显示特定行为时的输出。

SELECT * FROM gshck ORDER BY CAST(score AS unsigned) DESC limit 5
[(u'Enzo', u'1320'), (u'new', u'140')]
SELECT * FROM gshck ORDER BY CAST(score AS unsigned) DESC limit 5
[(u'Enzo', u'1320')]
SELECT * FROM gshck ORDER BY CAST(score AS unsigned) DESC limit 5
[(u'Enzo', u'1320'), (u'new', u'140')]

0 个答案:

没有答案