无法将测试用户写入SQLite数据库,Flask视图函数返回无效响应
问题解决:Flask添加测试用户时的TypeError错误
错误根源
你的代码存在两个问题,共同导致了这个TypeError:
- 重复实例化User对象:已经创建了
test_user实例,却又用User(test_user)作为参数传给db.session.add(),这会把已有的User实例当作参数传入构造函数,触发类型错误。 - 异常返回类型不合法:捕获异常后直接返回
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
相关产品推荐
相关产品推荐

