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

Flask SQLAlchemy无法向MySQL插入数据,求解决方法

解决SQLAlchemy创建表后无法插入数据的问题

看起来你遇到的核心问题是没有完成SQLAlchemy会话的添加与提交操作,这是新手使用SQLAlchemy时很常见的小坑。我来帮你一步步解决:

问题分析

你的代码已经成功创建了ar表,但在插入数据时只创建了Article实例,却没有把这个实例加入会话,也没有提交会话到数据库——数据只停留在内存中,自然不会写入MySQL。

修正步骤与完整代码

你需要补全两个关键操作:

  • 将创建的模型实例添加到SQLAlchemy会话
  • 提交会话,把数据同步到数据库

这里是修正后的完整代码:

db = SQLAlchemy(app)
class Article(db.Model):
    __tablename__ = 'ar'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
db.create_all()

@app.route('/')
def hello_world():
    try:
        # 创建模型实例
        article1 = Article(title='aaa', content='bbb')
        # 1. 将实例添加到会话,让SQLAlchemy追踪这个对象
        db.session.add(article1)
        # 2. 提交会话,把内存中的操作同步到MySQL数据库
        db.session.commit()
        return "数据插入成功!"
    except Exception as e:
        # 出错时回滚会话,避免会话处于异常状态影响后续操作
        db.session.rollback()
        return f"插入失败,错误信息:{str(e)}"

关键知识点说明

  • 会话(Session)是SQLAlchemy的核心:所有数据库操作都要通过会话来执行,创建实例后必须用db.session.add()把它纳入会话的追踪范围,否则SQLAlchemy不知道要处理这个对象
  • commit()是写入数据库的关键:只有执行commit(),会话中待执行的操作才会真正同步到MySQL;如果不执行,数据只会留在内存中,程序结束后就会丢失
  • 异常处理与回滚:添加rollback()可以在插入出错时撤销会话中的所有操作,防止会话处于异常状态,避免影响后续的数据库操作

内容的提问来源于stack exchange,提问作者chenhan zhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:17:47