有没有办法确保我的光标在 Python API 脚本中保持连接到 MySQL

Is there a way to ensure my cursor stays connected in my Python API script to MySQL

不断收到以下错误:

raise errors.ProgrammingError("Cursor is not connected") mysql.connector.errors.ProgrammingError: Cursor is not connected

我使用的代码在我的数据库更新时执行,但在第二次执行时却没有,我缺少什么来解决这个游标问题。

mycursor = mydb.cursor()

@app.route('/api/v1/currentuser/updateusername', methods=['PUT'])
def api_update_username():
    try:
        _json = request.json
        _username = _json['username']
        _user_id = _json['user_id']
        
        if _username and _user_id and request.method == 'PUT':
            sqlQuery = "UPDATE tblUser SET username=%s WHERE user_id=%s"
            bindData = (_username, _user_id,)
            mycursor.execute(sqlQuery, bindData)
            mydb.commit()
            response = jsonify('updated successfully!')
            response.status_code = 200
            return response
        else:
            return not_found()
    finally:
        mycursor.close()
        mydb.close()

在第一行(方法之外)创建游标实例。 这使您的游标可用于第一个请求,但您在最后关闭它(和数据库)。所以对于第二个请求,光标不再可用。

一个解决方案是让数据库连接保持打开状态,并为每个请求获取一个新游标(然后关闭它)。

@app.route('/api/v1/currentuser/updateusername', methods=['PUT'])
def api_update_username():
    try:
        mycursor = mydb.cursor()
        _json = request.json
        _username = _json['username']
        _user_id = _json['user_id']
        
        if _username and _user_id and request.method == 'PUT':
            sqlQuery = "UPDATE tblUser SET username=%s WHERE user_id=%s"
            bindData = (_username, _user_id,)
            mycursor.execute(sqlQuery, bindData)
            mydb.commit()
            response = jsonify('updated successfully!')
            response.status_code = 200
            return response
        else:
            return not_found()
    finally:
        mycursor.close()