Flask-Security-Too搭配SQLAlchemy创建一对多关联时报参数绑定错误
错误产生原因
user_id是你在Thread表定义的外键字段,数据类型为整数,仅支持传入用户ID的整数值,你直接将查询得到的User类实例对象赋值给该字段,数据库无法识别自定义Python对象类型,因此抛出类型不支持的接口错误。
你在User模型中对Thread关联设置了backref='author',这个author才是ORM层面用来绑定User实例的关系属性,你没有使用正确的属性赋值。
修复方案
你可以任选以下任意一种方式修复:
- 方案1:给外键字段传入User实例的ID值
# 从user实例中取出id属性赋值给user_id字段 new_thread = Thread(title=post, user_id=user.id) - 方案2:使用反向关系属性赋值(更符合ORM使用习惯)
直接用你定义的author反向引用属性传入User实例,SQLAlchemy会自动处理外键值的填充:new_thread = Thread(title=post, author=user)
其他代码问题提示
你贴出的代码还存在几处可优化修正的点:
- 所有模型类(RolesUsers、User、Role、Thread)的定义被放在了
create_app函数内部,会导致作用域问题,建议移到函数外部 create_thread路由函数的缩进层级错误- 数据库创建函数名拼写错误,你写的
create_databse少了一个字母a,正确拼写为create_database
内容的提问来源于stack exchange,提问作者henPHP
相关产品推荐
相关产品推荐

