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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:09