使用Flask SQLAlchemy更新特定行

时间:2018-03-31 11:34:33

标签: python postgresql flask sqlalchemy

我有一个配置文件的应用程序,我想根据其帐户ID仅更新特定的行。插入数据有效,但更新特定行却没有,我不确定我的代码哪个部分有问题。

@app.route('/edit_parent/<int:acc_id>', methods=['GET','POST'])
def edit_parent(acc_id):
myParent = Parent.query.filter_by(acc_id=int(acc_id)).first()

if request.method == "POST":

    myParent.fname_p = request.form['fname_p']
    myParent.lname_p = request.form['lname_p']
    myParent.bday_p = request.form['bday_p']
    myParent.add_p = request.form['add_p']

    db.session.commit()
    print "hello success"
    return redirect(url_for('parent', acc_id=int(acc_id)))

if request.method == "GET":
    return render_template('edit_p.html', acc_id=int(acc_id))

它打印“hello success”并重定向到父url但返回错误302并且db中仍然没有更改。

2 个答案:

答案 0 :(得分:1)

我根本不认为你正在更新特定的行,而是每次都只是插入一个新行:

myParent = Parent(request.form['fname_p'], request.form['lname_p'], 
           request.form['bday_p'], request.form['add_p']).where(acc_id=acc_id)
db.session.add(myParent)`

所以,你应该做的是:

myParent = Parent.query.filter_by(acc_id=acc_id)

假设您的Parent db具有以下属性:

myParent.fname = request.form['fname_p']
myParent.lname = request.form['lname_p']
myParent.bday  = request.form['bday_p']
myParent.add   = request.form['add_p']

db.session.commit()

答案 1 :(得分:0)

通过添加:

解决了这个问题
myParent = db.session.merge(myParent)

这样它将当前会话与前一个会话合并。它仍然返回302,但数据库上的数据已成功更新。