python-flask db.session.commit() is not working



问题是当用户尝试"忘记密码"选项时。它创建新的reset_key进行验证,但新密钥不会更新到DB中。

@app.route('/login/forgot/', methods=['GET', 'POST'])
def forgot():
   form = ResetLoginForm(request.form)
   #There's no session yet. User just pointing to /login/forgot url.
   if request.method == 'POST' and form.validate():
      user = User.query.filter_by(email=form.email.data).first()
   if not user:
     flash('The username or email incorrect')
     return render_template('forgot.html', form=form)
   reset_key = generate_key() ## this creates a new key, but how update  this key into db?
   #tried something like 
   user.reset_key = reset_key 
   db.session.add(user)
   db.session.commit()
   #this is not working. Is it due to session is not started or something?

谢谢你的帮助或提示。

这是因为User.query.filter_by(email=form.email.data).first()将返回一个sqlalchemy.orm.query.Query对象。正如其医生所说:

查询是ORM生成的所有SELECT语句的来源,由最终用户查询操作以及高级别内部操作,例如相关的集合加载。它具有生成接口,通过该接口,连续调用将返回新的查询对象,前者的副本,具有附加条件和与之相关的选项。

所以你只得到一个复制的对象,所以你的更改不会起作用;

您可以这样使用:user = db.session.query(User).filter_by(email==form.email.data).first()然后您可以更改user属性

user = db.session.query(User).first()解决了问题。

相关内容

最新更新