python flask db.session.commit()不工作

python flask db.session.commit()不工作,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,问题是当用户尝试“忘记密码”选项时。它会创建新的reset_key进行验证,但新密钥不会更新到数据库中 @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

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

@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\u by(email=form.email.data)。first()
将返回
sqlalchemy.orm.query.query
对象。正如其文件所说:

查询是ORM生成的所有SELECT语句的源, 这些都是由最终用户查询操作以及高级 级别内部操作,如相关集合加载。信息技术 具有生成接口,连续调用可返回新的 查询对象,具有附加条件和 与之关联的选项

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

您可以这样使用:
user=db.session.query(user).filter\u by(email==form.email.data).first()

然后您可以更改
user
attrs

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

删除添加新用户记录的行:
db.session.add(user)