Flask使用SQLAlchemy创建User对象时出现NoForeignKeysError如何解决
问题原因
SQLAlchemy 会自动为继承自db.Model的类生成默认表名,规则是将驼峰类名转换为小写蛇形格式。你的Activity_Presence模型类,默认生成的表名为activity_presence,但你在多对多中间表user_presence的外键定义里,写的是引用Activity_Presence.id,SQLAlchemy找不到名为Activity_Presence的表,因此抛出外键关系不存在的错误。你定义中间表时显式指定了表名为User_Presence、User类默认生成的表名为user,这两处的引用是正确的,没有问题。
修复方案
两种方案二选一即可:
- 方案1:修改中间表的外键引用表名,和SQLAlchemy默认生成的小写表名保持一致
把user_presence关联表中presence_id的外键定义修改为:db.Column('presence_id', db.Integer, db.ForeignKey('activity_presence.id'), primary_key=True) - 方案2:给
Activity_Presence类显式指定表名,和你外键里写的名称保持一致
在Activity_Presence类中添加__tablename__属性:class Activity_Presence(db.Model): __tablename__ = 'Activity_Presence' id = db.Column(db.Integer, primary_key=True)
验证
修改完成后如果已经生成过旧表,先删除旧表,再重新执行db.create_all(),之后创建User实例就不会触发该错误了。
内容的提问来源于stack exchange,提问作者FallonPy
相关产品推荐
相关产品推荐

