2017-03-22 11 views
0

このコードは、データベース内のpost_idに一致するポストを更新することになっています。しかし、それはテーブルのすべてのポストを更新します。SQLalchemyは1行ではなくすべての行を更新します

コードは正しく編集されているため、正しく動作します。

@app.route('/update/<post_id>', methods=['GET', 'POST']) 
def update(post_id): 
    if 'username' not in session: 
    return redirect(url_for('login')) 
    post = Post.query.get(post_id) 
    form = PostForm(obj=post) 

    if request.method == 'POST': 
    if form.validate() == False: 
     return render_template('update.html', form=form) 
    else: 
     Post.query.filter(Post.post_id==int(post_id)).update(dict(
     title=form.title.data, body=form.body.data)) 
     db.session.commit() 
     return redirect(url_for('retrieve')) 

    elif request.method == 'GET': 
    return render_template('update.html', form=form, post_id=post_id) 


class Post(db.Model): 
    __tablename__ = 'posts' 
    post_id = db.Column(db.Integer, primary_key=True) 
    author = db.Column(db.String(128)) 
    title = db.Column(db.String(128)) 
    body = db.Column(db.Text) 

    def __init__(self, author, title, body): 
    self.author = author 
    self.title = title 
    self.body = body 

<form method="POST" action="/update/{{post_id}}"> 

答えて

1

あなたはPostクラス属性post_idで渡さpost_idの等価性をチェックする必要があります。あなたはpost_id自体(ないPostクラス属性を持つ)でpost_idをチェックするため

Post.query.filter(Post.post_id==int(post_id)).update(dict(
     title=form.title.data, body=form.body.data)) 

あなたのクエリは、すべてのPostレコードを返す必要があります。

+0

変更を加えても機能しませんでした。クエリは0を返し、何も更新しません。 – wildExploit

+0

'post_id'を整数として定義しているので、' post_id'の型をintに変更してください。私の更新をチェックしてください。 –

+0

このエラーが発生しました: "ValueError:基数10のint()のリテラルが無効です: ''" – wildExploit

関連する問題