Flask中无法将request.form获取的user_id整数插入MySQL
问题解决:Flask插入MySQL时出现TypeError
错误根源
你遇到的TypeError: 'str' object cannot be interpreted as an integer错误,并非user_id的转换问题,而是MySQL端口配置错误:
你把MYSQL_PORT设置成了字符串'3307',但flask_mysqldb要求这个参数必须是整数类型,框架在建立数据库连接时会尝试将端口参数当作整数处理,由此触发类型错误。
修复步骤
修正端口配置
将端口配置的字符串改为整数:app.config['MYSQL_PORT'] = 3307 # 去掉引号,使用整数类型可选:给user_id增加容错处理
为避免前端传入无效的user_id值(比如空字符串、非数字字符),可以添加判断逻辑增强接口健壮性:user_id = request.form.get('user_id') if not user_id or not user_id.isdigit(): return "Invalid user_id", 400 user_id = int(user_id)
修正后的完整代码
from flask import Flask, jsonify, render_template from flask import request import socket from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = '192.168.0.101' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PORT'] = 3307 # 修正为整数 app.config['MYSQL_PASSWORD'] = 'password' app.config['MYSQL_DB'] = 'msblog_users' mysql = MySQL(app) @app.route("/create_post", methods = ['POST', 'GET']) def create_post(): if request.method == 'GET': return "You can only send post requests here!" if request.method == 'POST': user_id = request.form.get('user_id') # 新增容错判断 if not user_id or not user_id.isdigit(): return "Invalid user_id", 400 user_id = int(user_id) message = request.form.get('message') cursor = mysql.connection.cursor() cursor.execute('''INSERT INTO posts (user_id, post)VALUES (%s, %s)''', (user_id, message)) mysql.connection.commit() cursor.close() return "Done"
补充说明
这个错误信息具有误导性,容易让你误以为是user_id的转换逻辑出了问题,但实际是数据库连接配置中的端口类型错误导致的。修正端口配置后,原本的user_id转换逻辑是正常的,添加容错处理能进一步提升接口稳定性。
内容的提问来源于stack exchange,提问作者Sajad Kamali
相关产品推荐
相关产品推荐

