我的ubuntu 16& 16上有一个使用SQLAlchemy和MySQL-server的Web应用程序。 Nginx + uwsgi。
创建引擎时,我把
echo=True
获取查询的跟踪。我在注册用户时遇到问题,每次在flask登录时调用user_loader,执行:
dbsession.query(User).filter_by(id=user_id).first()
我得到的结果是:
INFO sqlalchemy.engine.base.Engine SELECT user.id AS user_id, user.name AS user_name, user.email AS user_email, user.pass$
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: FROM user
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: WHERE user.id = %s
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: LIMIT %s
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: 2017-03-29 23:48:56,517 INFO sqlalchemy.engine.base.Engine ('61', 1)
结果为无。但是,在上面的例子中,使用user_id = 61,我可以在ubuntu的mysql shell上找到用户获取用户ID 61。
当我刷新页面几次,结果就会出来。 一旦用户完成注册,他们将被重定向到登录页面,在完成表单后,它会显示错误"请注册",如果现在使用此查询找到用户,则会触发该操作:
dbsession.query(User).filter_by(id=user_id).first()
注册时我的代码是:
user = User(name=name, email=email, password=password)
dbsession.add(user)
dbsession.commit()
return redirect(url_for('login'))
已完成检查以确保名称,电子邮件密码有效。
由于
答案 0 :(得分:0)
解决了这个问题。
感谢@iljaEverila。
基本上我需要确保来自SQLAlchemy的dbsession已经保留了数据,并且没有挂起的事务。因此,一旦用户注册并调用user_loader,我只需要调用:
dbsession.commit()
然后叫这个:
dbsession.query(User).filter_by(id=user_id).first()
会成功。
由于