使用Python+Postman删除MySQL记录时/delete接口POST请求报错
问题分析与解决方案
你的代码存在两个关键问题,导致了500内部服务器错误:
1. SQL执行参数格式错误
MySQL驱动(如MySQLdb)的cursor.execute()方法要求参数必须是元组或列表类型,你直接传入单个字符串first_name,会触发数据库编程错误(ProgrammingError)。
2. Flask视图返回非法类型
Flask视图函数必须返回合法响应类型(字符串、字典、Response实例等),你的异常处理块直接返回了Exception对象e,Flask无法将其转换为合法响应,这是触发500错误的直接原因。
修正后的完整代码
from flask import Flask, request, jsonify @app.route("/delete", methods=['POST']) def delete_record(): # 确保数据库连接和游标正确释放 try: mydb = con.connect(host="localhost", user="root", password="password", database="mysql_python") with mydb.cursor() as cursor: # 使用get避免前端未传参时触发KeyError first_name = request.json.get('firstname') if not first_name: return jsonify({"error": "缺少firstname参数"}), 400 query = "DELETE FROM user_accounts WHERE First_Name = %s" # 将参数包装成元组(注意逗号不能少) cursor.execute(query, (first_name,)) mydb.commit() return jsonify({"status": "success"}), 200 except Exception as e: # 返回异常信息的字符串形式,同时返回500状态码 return jsonify({"error": str(e)}), 500 finally: # 确保连接始终关闭,防止连接泄漏 if 'mydb' in locals() and mydb.is_connected(): mydb.close()
额外注意事项
- Postman请求时,需确认请求头
Content-Type设置为application/json,否则request.json会为空。 - 使用
request.json.get()替代直接索引,能避免前端未传参时触发额外错误。 - 用
jsonify返回JSON格式响应,更符合REST API规范。
内容的提问来源于stack exchange,提问作者Abhishek Kashyap
相关产品推荐
相关产品推荐

