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
attrsuser=db.session.query(user).first()
解决问题。删除添加新用户记录的行:db.session.add(user)