我有一个配置文件的应用程序,我想根据其帐户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中仍然没有更改。
答案 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,但数据库上的数据已成功更新。