Flask+MySQL提交表单遇SQLALCHEMY_TRACK_MODIFICATIONS错误求助
解决Flask插入MySQL时的SQLALCHEMY_TRACK_MODIFICATIONS错误
错误根源
这个错误是因为Flask-SQLAlchemy默认开启了对象修改追踪功能,会额外消耗系统资源,新版本框架要求你显式配置这个选项,否则就会抛出警告或错误。
核心解决步骤
- 在Flask应用的配置中添加一行,关闭修改追踪:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False - 同时确保你的数据库连接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
相关产品推荐
相关产品推荐

