为了账号安全,请及时绑定邮箱和手机立即绑定

Flask+SQLAlchemy 在尝试按外键列过滤记录时抛出 OperationalError

Flask+SQLAlchemy 在尝试按外键列过滤记录时抛出 OperationalError

qq_遁去的一_1 2023-06-13 10:53:26
因此,作为个人项目,我正在开发一个小型博客风格的 Web 应用程序。我现在已经基本可以正常工作了,但是我在尝试对帖子发表评论时遇到了麻烦。我设置帖子的方式是通过 SQLAlchemy ORM 模型,效果很好。它有内容和标题字段等等,以及与帖子作者的多对一关系,如下所示:class Post(db.Model):    id = db.Column(db.Integer, primary_key = True)    title = db.Column(db.String(100), nullable=False)    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)    content = db.Column(db.Text, nullable=False)    feature_image = db.Column(db.String, nullable=True)    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)    comments = db.relationship('Comment', backref='original_post', lazy=True)我的评论遵循相同的结构,与帖子具有多对一的关系,如下所示:class Comment(db.Model):    id = db.Column(db.Integer, primary_key = True)    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)    content = db.Column(db.Text, nullable=False)    post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)因此,为了让评论显示在帖子下方,我试图查询“评论”表并从“帖子”表中过滤“post_id”,它应该与 post.id 相匹配:@app.route('/post/<int:post_id>')def post(post_id):    post = Post.query.get_or_404(post_id)    comments = Comment.query.filter(Comment.original_post==post)但是当我尝试加载帖子页面时,它会抛出以下错误:sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: comment.post_id[SQL: SELECT comment.id AS comment_id, comment.date_posted AS comment_date_posted, comment.content AS comment_content, comment.post_id AS comment_post_id, comment.user_id AS comment_user_id FROM comment WHERE ? = comment.post_id][parameters: (1,)](Background on this error at: http://sqlalche.me/e/e3q8)我查看了有关该主题的其他一些主题,建议在查询之前使用 .join ,如下所示:comments = Comment.query.join(Post).filter(Post.id == post_id).all()
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

在 db 文件中的“评论”表只是缺少外键字段。



查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信