Flask SQLAlchemy报错:外键约束引用的列'id'不存在求助
解决Flask-SQLAlchemy外键约束报错:
column 'id' referenced in foreign key constraint does not exist 这个问题我之前也踩过坑!根源其实是Flask-SQLAlchemy默认的表名规则在搞鬼:
Flask-SQLAlchemy会自动把模型类名转换成小写复数形式作为数据库表名。比如你定义的Patient类,对应的数据库表名是patients,但你在Note模型的patient_id字段里,外键写的是db.ForeignKey("patient.id")——这里用了单数的patient,数据库里根本不存在这个表,自然就会报错说找不到对应的id列了。
给你两种简单的解决办法:
办法一:用默认的复数表名修改外键
直接把外键里的表名改成复数形式就行:
class Note(db.Model): id = db.Column(db.Integer, primary_key=True) # 把 patient.id 改成 patients.id patient_id = db.Column(db.Integer, db.ForeignKey("patients.id"), nullable=False)
办法二:给模型显式指定单数表名
如果你就是想用单数的表名,可以给Patient模型加上__tablename__属性,强制指定表名:
class Patient(db.Model): __tablename__ = 'patient' # 显式设置表名为单数 id = db.Column(db.Integer, primary_key=True) notes = db.relationship("Note", backref=db.backref("patient", lazy=True))
这样原来的db.ForeignKey("patient.id")就能正常工作了。
最后提醒下:修改完模型后,如果用了Flask-Migrate做数据库迁移,记得执行这两条命令更新数据库:
flask db migrate -m "fix foreign key table name" flask db upgrade
要是你是直接用db.create_all()创建表的,得先删掉旧的数据库文件,再重新运行创建表的代码哦。
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

