簡體   English   中英

Flask+SQLAlchemy 在嘗試按外鍵列過濾記錄時拋出 OperationalError

[英]Flask+SQLAlchemy thows OperationalError when trying to filter records by foreign key column

所以,我正在開發一個小博客風格的 web 應用程序作為個人項目。 我現在已經可以正常工作了,但是我在嘗試對帖子進行評論時遇到了麻煩。

我設置帖子的方式是通過 SQLAlchemy ORM model model,它工作正常。 它具有內容和標題字段,以及與帖子作者的多對一關系,例如:

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”表中查詢“comment”表並過濾“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)

我查看了有關該主題的其他一些線程,這些線程在查詢之前建議 a.join ,如下所示:

comments = Comment.query.join(Post).filter(Post.id == post_id).all()

但我得到一個類似的錯誤:

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 JOIN post ON post.id = comment.post_id 
WHERE post.id = ?]
[parameters: (1,)]

我在 db 文件中的“評論”表只是缺少外鍵字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM