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

Flask+MySQL提交表单遇SQLALCHEMY_TRACK_MODIFICATIONS错误求助

解决Flask插入MySQL时的SQLALCHEMY_TRACK_MODIFICATIONS错误

错误根源

这个错误是因为Flask-SQLAlchemy默认开启了对象修改追踪功能,会额外消耗系统资源,新版本框架要求你显式配置这个选项,否则就会抛出警告或错误。

核心解决步骤

  1. 在Flask应用的配置中添加一行,关闭修改追踪:
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
  2. 同时确保你的数据库连接URI配置正确,MySQL的格式是:
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://用户名:密码@localhost/数据库名'
    
    记得把里面的用户名、密码、数据库名换成你自己的实际信息。

完整代码修正示例(main.py)

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 替换为你的MySQL连接信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost/my_flask_db'
# 关闭修改追踪,解决报错
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

# 模型要和PhpMyAdmin中的数据表结构完全对应
class Contact(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), nullable=False)
    message = db.Column(db.Text, nullable=False)

@app.route('/contact', methods=['GET', 'POST'])
def contact():
    if request.method == 'POST':
        # 从表单取数据,name属性要和前端表单的name一致
        name = request.form.get('name')
        email = request.form.get('email')
        message = request.form.get('message')
        # 创建数据实例
        new_contact = Contact(name=name, email=email, message=message)
        # 提交到数据库
        db.session.add(new_contact)
        db.session.commit()
        return "数据提交成功!"
    return render_template('contact.html')

if __name__ == '__main__':
    app.run(debug=True)

前端表单注意事项(contact.html)

确保表单的name属性和后端模型的字段名完全匹配,示例如下:

<form method="POST" action="/contact">
    <div>
        <label>姓名:</label>
        <input type="text" name="name" required>
    </div>
    <div>
        <label>邮箱:</label>
        <input type="email" name="email" required>
    </div>
    <div>
        <label>留言:</label>
        <textarea name="message" required></textarea>
    </div>
    <button type="submit">提交</button>
</form>

额外验证要点

  • 检查PhpMyAdmin中的数据表字段:字段名、数据类型、是否允许为空,必须和后端模型定义一致。
  • 启动Flask应用后,提交表单,去PhpMyAdmin查看对应表是否有新数据插入。
  • 如果还有其他报错,直接看终端的错误日志,比如数据库连接失败、字段不匹配这类问题,针对性调整即可。

内容的提问来源于stack exchange,提问作者ABHISHEK GUPTA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:15