有没有办法确保我的光标在 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()
不断收到以下错误:
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()