sqlalchemy.exc.NoForeignKeysError:Userdb.post关联无法确定连接条件问题
报错根因
你代码中BlogPost类的author关系错误使用了lazy='dynamic'参数:lazy='dynamic'仅支持一对多、多对多这类返回集合的关系端,多对一的author属性返回单个Userdb对象,不支持该参数,会导致SQLAlchemy无法正确解析两张表的外键关联关系,触发NoForeignKeysError异常。
修复方案
将BlogPost类中author关系的lazy='dynamic'参数删除即可,修复后的完整代码如下:
##CONFIGURE TABLES class Userdb(db.Model, UserMixin): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(100), unique=True) password = db.Column(db.String(100)) name = db.Column(db.String(100)) # 该属性为绑定到每个用户的BlogPost对象列表,"author"对应BlogPost类中的author属性 post = relationship("BlogPost", back_populates="author", lazy='dynamic') class BlogPost(db.Model): __tablename__ = "blog_posts" id = db.Column(db.Integer, primary_key=True) author_id = db.Column(db.Integer, db.ForeignKey("users.id"),nullable=False) # 建立对User对象的引用,"post"对应User类中的post属性,移除不支持的lazy='dynamic'参数 author = relationship("Userdb", back_populates="post") # 建立外键,"users.id"中的users对应用户表的表名 title = db.Column(db.String(250), unique=True, nullable=False) subtitle = db.Column(db.String(250), nullable=False) date = db.Column(db.String(250), nullable=False) body = db.Column(db.String(10000), nullable=False) img_url = db.Column(db.String(250), nullable=False)
如果删除参数后仍有报错,可以在Userdb的post关系中显式指定primaryjoin参数强制关联:
post = relationship("BlogPost", back_populates="author", lazy='dynamic', primaryjoin="Userdb.id == BlogPost.author_id")
内容的提问来源于stack exchange,提问作者Shubham Das
相关产品推荐
相关产品推荐

