You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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要求这个参数必须是整数类型,框架在建立数据库连接时会尝试将端口参数当作整数处理,由此触发类型错误。

修复步骤

  1. 修正端口配置
    将端口配置的字符串改为整数:

    app.config['MYSQL_PORT'] = 3307  # 去掉引号,使用整数类型
    
  2. 可选:给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:42:23