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

无法将测试用户写入SQLite数据库,Flask视图函数返回无效响应

问题解决:Flask添加测试用户时的TypeError错误

错误根源

你的代码存在两个问题,共同导致了这个TypeError:

  1. 重复实例化User对象:已经创建了test_user实例,却又用User(test_user)作为参数传给db.session.add(),这会把已有的User实例当作参数传入构造函数,触发类型错误。
  2. 异常返回类型不合法:捕获异常后直接返回e(Exception对象),但Flask视图函数必须返回字符串、Response实例等合法响应类型,不能直接返回异常对象。

修复步骤

  • 修正添加用户的代码:将db.session.add(User(test_user))改为db.session.add(test_user),直接传入已创建好的User实例。
  • 调整异常返回逻辑:将return e改为return str(e),把异常对象转为字符串,符合Flask的响应要求。

修复后的完整代码

from flask import Flask
from flask import render_template
from flask import redirect
from flask import url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users_db.db'
app.secret_key = "secret"
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=False, nullable=False)
    email = db.Column(db.String(), unique=True, nullable=False)
    password = db.Column(db.String(), unique=False, nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.id}')"


@app.route('/')
def home():
    return render_template('home.html')

@app.route('/test_db')
def test_db():
    try:
        test_user = User(username='TestUser', email='testuser@example.com', password='testpassword')
        db.session.add(test_user)  # 修复:直接传入已创建的实例
        db.session.commit()
        return "Test Passed"
    except Exception as e:
        return str(e)  # 修复:将异常转为字符串返回

if __name__ == "__main__":
    with app.app_context():
        db.create_all()
    app.run(debug=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:16